Numpy基础笔记
Numpy简介
Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包。其部分功能如下:
①ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
②用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
③用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
④线性代数、随机数生成以及傅里叶变换功能。
⑤用于集成由C、C++、Fortran等语言编写的代码的工具。
创建数组
创建数组最简单的办法是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的NumPy数组。以一个列表的转换为例:
- data1=[6,7.5,8,0,1] #创建列表
- arr1=np.array(data1) #转换为数组
- arr1.dtype #数据类型保存在dtype对象中
- data2=[[1,2,3,4],[5,6,7,8]] #创建嵌套序列(由等长列表组成的列表)
- arr2=np.array(data2) #转换为多维数组
- np.zeros(10) #创建指定长度(10)的全0数组
- np.ones((3,6)) #创建指定长度的(3行6列二维)的全1数组
- range(10) #创建指定数量的顺序列表(内置函数,默认0开始)
- arange(10) #创建指定数量的顺序数组
- eye(10) #创建一个正方的N×N单位矩阵
- arr1=np.array([1,2,3],dtype=np.float64) #解释为特定数据类型
数组和标量之间的运算
- arr=np.array([[1.,2.,3.],[4.,5.,6.]]) #创建二维数组
- arr*arr #行列号相同的数组元素间运算
- arr-arr
- 1/arr
- arr*0.5
基本的索引与切片
- arr=np.arange(10)
- arr[5] #索引第6个元素
- arr[5:8] #索引第6到第9个元素作为数组
- arr[5:8]=12 #令第6到第9个元素等于12
- arr_slice=arr[5:8] #数组切片是原始数据的视图,视图上的任何修改都会反映到原数组
- arr_slice[:]=64 #将数组切片的全部元素改为64
- arr[5:8].copy() #得到数组切片的一份副本
- arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])
- arr2d[2] #索引二维数组第3行
- arr2d[0][2] arr2d[0,2] #等价索引1行3列元素
- arr2d[:2] #索引第1行和第2行(不含第3行)
- arr2d[:,:1] #索引第1列
- arr2d[:-2] #使用负数索引将从尾部开始选取行
数组转置和轴对换
转置(transpose)是重塑的一种特殊形式,它返回的是源数据的视图(不会进行复制操作)。
- arr=np.arange(15).reshape((3,5)) #生成顺序数组,后整形为3行5列
- arr.T #转置
- arr=np.random.randn(6,3) #randn函数生成一些正态分布的随机数组(6行3列)
- np.dot(arr.T,arr) #利用np.dot计算矩阵内积XTX
通用函数:快速的元素级数组函数
通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数。
- arr=np.arange(10)
- np.sqrt(arr) #计算各元素的平方根(arr**0.5)
- exp #计算各元素指数ex; abs #绝对值;
- np.add(x,y) #x、y数组中对应元素相加; subtract #相减; multiply #相乘; divide #相除;
利用数组进行数据处理
用数组表达式代替循环的做法,通常称为矢量化
将条件逻辑表述为数组运算
Numpy.where函数是三元表达式x if condition else y的矢量化版本
- xarr=np.array([1.1,1.2,1.3,1.4,1.5]) #两个数值数组
- yarr=np.array([2.1,2.2,2.3,2.4,2.5])
- cond=np.array([True,False,True,True,False]) #一个布尔数组
- result=np.where(cond,xarr,yarr) #三元表达式
数学和统计方法
可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算。Sum、mean以及标准差std等聚合计算(aggregation,通常叫做约简(reduction))既可以当做数组的实例方法调用,也可以当做顶级NumPy函数使用:
- arr=np.random.randn(5,4)
- arr.mean(); np.mean(arr); arr.sum();
- arr.mean(axis=1) #计算该轴上的统计值(0为列,1为行)
用于布尔型数组的方法
布尔值会被强制转换为1(True)和0(False)。因此,sum经常被用来对布尔型数组中的True值计数:
- arr=randn(100)
- (arr>0).sum() #正值的数量
- bools.any() #用于测试数组中是否存在一个或多个True
- bools.all() #用于测试数组中所有值是否都是True
排序
跟Python内置的列表类型一样,NumPy数组也可以通过sort方法就地排序(修改数组本身)。
- arr=randn(8)
- arr.sort()
- arr=randn(5,3)
- arr.sort(0) #二维数组按列排序; arr.sort(1) #二维数组按行排序;
唯一化
- ints=np.array([3,3,3,2,2,1,1,4,4])
- np.unique(names) #找出数组中的唯一值并返回已排序的结果
用于数组的文件输入输出
Numpy能够读写磁盘上的文本数据或二进制数据。
- arr=np.arange(10)
- np.save(‘some_array’,arr) #数组以未压缩的原始二进制格式保存在.npy文件中
- np.load(‘some_array’) #通过np.load读取磁盘上的数组
- np.savez(‘array_archive.npz’,a=arr,b=arr) #将多个数组以保存在一个压缩文件中
- a=np.arange(0,12,0.5).reshape(4,-1)
- np.savetxt(‘E:\\knakan\\a.txt’,a) #缺省按照’%.18e’格式保存数据,以空格分隔
- np.loadtxt(‘E:\\kankan\\a.txt’)
- np.savetxt(‘E:\\kankan\\a.txt’,a,fmt=”%d”,delimiter=”,”) #改为保存为整数,以逗号分隔
- np.loadtxt(‘E:\\kankan\\a.txt’,delimiter=”,”) #读入时也需指定逗号分隔
线性代数
- x=np.array([[1.,2.,3.],[4.,5.,6.]])
- y=np.array([[6.,23.],[-1,7],[8,9]])
- x.dot(y) #矩阵乘法,相当于np.dot(x,y)
【参考文献】
[1]. 利用Python进行数据分析,wes McKinney著,唐学韬译,2014年,机械工业出版社
Numpy基础笔记的更多相关文章
- [学习笔记] Numpy基础 系统学习
[学习笔记] Numpy基础 上专业选修<数据分析程序设计>课程,老师串讲了Numpy基础,边听边用jupyter敲了下--理解+笔记. 老师讲的很全很系统,有些点没有记录,在PPT里就不 ...
- 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算
http://www.cnblogs.com/batteryhp/p/5000104.html 第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说, ...
- python学习笔记(三):numpy基础
Counter函数可以对列表中数据进行统计每一个有多少种 most_common(10)可以提取前十位 from collections import Counter a = ['q','q','w' ...
- 【学习笔记】 第04章 NumPy基础:数组和矢量计算
前言 正式开始学习Numpy,参考用书是<用Python进行数据清洗>,计划本周五之前把本书读完,关键代码全部实现一遍 NumPy基础:数组和矢量计算 按照书中所示,要搞明白具体的性能差距 ...
- NumPy学习笔记 三 股票价格
NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- NumPy学习笔记 一
NumPy学习笔记 一 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- Numpy学习笔记(上篇)
目录 Numpy学习笔记(上篇) 一.Jupyter Notebook的基本使用 二.Jpuyter Notebook的魔法命令 1.%run 2.%timeit & %%timeit 3.% ...
- 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片
概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...
随机推荐
- python小程序——购物
流程图 代码程序 saving = int(input('请输入你的工资:'))shopping = [['iphone',5800],['mx6',2000],['pythonbook',80], ...
- db4o官方停止支持及面向对象数据库的一些感想
前一段时间试用了db4o,真心认为不错.但自己在国内搜索了一下,并没有找到不论什么一个专门的论坛和面向对象的数据库产品.深感这东西在国内并没有太普及. 但自己试用认为这个东东真心不错(当然也有自己的优 ...
- uvalive 2326 - Moving Tables(区间覆盖问题)
题目连接:2326 - Moving Tables 题目大意:在一个走廊上有400个教室, 先在有一些桌子要移动, 每次移动需要十分钟, 但是不同房间的桌子可以在同一个十分钟内移动,只要走廊没有被占用 ...
- android 43 SQLite数据库
SQLite数据库很小,占用内存只有几百K,安卓和IOS都是用的SQLite数据库. 页面: <LinearLayout xmlns:android="http://schemas.a ...
- android 31 GridView
GridView:网格列表,也支持适配器. package com.sxt.day05_01; import java.util.ArrayList; import java.util.List; i ...
- 亲测PHP环境
一.安装Apache2.2.22→1.下载软件,点安装 2.填写dengguoxing.com www.dengguoxing.com(暂时不知道什么用)3.custom 个性化安装 更改路径即可 ...
- [iOS 开发]UITableView第一行显示不完全
造成这个问题的原因可能有两个: 1. UITableView的contentOffset属性的改变: 2. MJRefresh调用两次headerEndRefreshing会造成刷新后UITableV ...
- Android常用组件【转】
UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...
- listView中的button控件获取item的索引
在listview中的listitem设置事件响应,如果listitem中有button控件,这时候listitem就不会捕获到点击事件,而默认的是listitem中的button会捕获点击事件.那么 ...
- 我的第一个boke
哈哈哈 接口