numpy notes
下面是笔记, 慢慢补充 免得忘记了
Numpy 简介
Numpy(Numerical Python 的简称)是高性能科学计算和数据分析的基础包。其部分功能如下:
①ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
②用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
③用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
④线性代数、随机数生成以及傅里叶变换功能。
⑤用于集成由 C、C++、Fortran 等语言编写的代码的工具。
创建数组
创建数组最简单的办法是使用 array 函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的 NumPy 数组。以一个列表的转换为例:
1. data1=[6,7.5,8,0,1] #创建列表
2. arr1=np.array(data1) #转换为数组
3. arr1.dtype #数据类型保存在 dtype 对象中
4. data2=[[1,2,3,4],[5,6,7,8]] #创建嵌套序列(由等长列表组成的列表)
5. arr2=np.array(data2) #转换为多维数组
6. np.zeros(10) #创建指定长度 (10) 的全 0 数组
7. np.ones((3,6)) #创建指定长度的 (3 行 6 列二维) 的全 1 数组
8. range(10) #创建指定数量的顺序列表(内置函数, 默认 0 开始)
9. arange(10) #创建指定数量的顺序数组
10. eye(10) #创建一个正方的 N×N 单位矩阵
11. arr1=np.array([1,2,3],dtype=np.float64) #解释为特定数据类型
数组和标量之间的运算
```1. arr=np.array([[1.,2.,3.],[4.,5.,6.]]) #创建二维数组
2. arr*arr #行列号相同的数组元素间运算
3. arr-arr
4. 1/arr
5. arr*0.5
基本的索引与切片
``` 1. arr=np.arange(10)
2. arr[5] #索引第 6 个元素
3. arr[5:8] #索引第 6 到第 9 个元素作为数组
4. arr[5:8]=12 #令第 6 到第 9 个元素等于 12
5. arr_slice=arr[5:8] #数组切片是原始数据的视图,视图上的任何修改都会反映到原数组
6. arr_slice[:]=64 #将数组切片的全部元素改为 64
7. arr[5:8].copy() #得到数组切片的一份副本
8. arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])
9. arr2d[2] #索引二维数组第 3 行
10. arr2d[0][2] arr2d[0,2] #等价索引 1 行 3 列元素
11. arr2d[:2] #索引第 1 行和第 2 行(不含第 3 行)
12. arr2d[:,:1] #索引第 1 列
13. arr2d[:-2] #使用负数索引将从尾部开始选取行
数组转置和轴对换
转置(transpose)是重塑的一种特殊形式,它返回的是源数据的视图(不会进行复制操作)。
1. arr=np.arange(15).reshape((3,5)) #生成顺序数组,后整形为 3 行 5 列
2. arr.T #转置
3. arr=np.random.randn(6,3) #randn 函数生成一些正态分布的随机数组(6 行 3 列)
4. np.dot(arr.T,arr) #利用 np.dot 计算矩阵内积 XTX
通用函数:快速的元素级数组函数
通用函数(即 ufunc)是一种对 ndarray 中的数据执行元素级运算的函数。
1. arr=np.arange(10)
2. np.sqrt(arr) #计算各元素的平方根(arr**0.5)
3. exp #计算各元素指数 ex; abs #绝对值;
4. np.add(x,y) #x、y 数组中对应元素相加; subtract #相减; multiply #相乘; divide #相除;
利用数组进行数据处理
用数组表达式代替循环的做法,通常称为矢量化
将条件逻辑表述为数组运算
Numpy.where 函数是三元表达式 x if condition else y 的矢量化版本
1. xarr=np.array([1.1,1.2,1.3,1.4,1.5]) #两个数值数组
2. yarr=np.array([2.1,2.2,2.3,2.4,2.5])
3. cond=np.array([True,False,True,True,False]) #一个布尔数组
4. result=np.where(cond,xarr,yarr)
``` #三元表达式
数学和统计方法
可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算。Sum、mean 以及标准差 std 等聚合计算(aggregation,通常叫做约简(reduction))既可以当做数组的实例方法调用,也可以当做顶级 NumPy 函数使用:
1. arr=np.random.randn(5,4)
2. arr.mean(); np.mean(arr); arr.sum();
3. arr.mean(axis=1) #计算该轴上的统计值(0 为列,1 为行)
用于布尔型数组的方法
布尔值会被强制转换为 1(True)和 0(False)。因此,sum 经常被用来对布尔型数组中的 True 值计数:
1. arr=randn(100)
2. (arr>0).sum() #正值的数量
3. bools.any() #用于测试数组中是否存在一个或多个 True
4. bools.all() #用于测试数组中所有值是否都是 True
排序
跟 Python 内置的列表类型一样,NumPy 数组也可以通过 sort 方法就地排序(修改数组本身)。
1. arr=randn(8)
2. arr.sort()
3. arr=randn(5,3)
4. arr.sort(0) #二维数组按列排序; arr.sort(1) #二维数组按行排序;
唯一化
1. ints=np.array([3,3,3,2,2,1,1,4,4])
2. np.unique(names) #找出数组中的唯一值并返回已排序的结果
用于数组的文件输入输出
Numpy 能够读写磁盘上的文本数据或二进制数据。
1. arr=np.arange(10)
2. np.save(‘some_array’,arr) #数组以未压缩的原始二进制格式保存在. npy 文件中
3. np.load(‘some_array’) #通过 np.load 读取磁盘上的数组
4. np.savez(‘array_archive.npz’,a=arr,b=arr) #将多个数组以保存在一个压缩文件中
5. a=np.arange(0,12,0.5).reshape(4,-1)
6. np.savetxt(‘E:\\knakan\\a.txt’,a) #缺省按照’%.18e’格式保存数据,以空格分隔
7. np.loadtxt(‘E:\\kankan\\a.txt’)
8. np.savetxt(‘E:\\kankan\\a.txt’,a,fmt=”%d”,delimiter=”,”) #改为保存为整数,以逗号分隔
9. np.loadtxt(‘E:\\kankan\\a.txt’,delimiter=”,”) #读入时也需指定逗号分隔
线性代数
1. x=np.array([[1.,2.,3.],[4.,5.,6.]])
2. y=np.array([[6.,23.],[-1,7],[8,9]])
3. x.dot(y) #矩阵乘法,相当于 np.dot(x,y)
```