NumPy
---恢复内容开始---
nadarray N维数组对象(矩阵)
- 所有元素必须是相同类型
- ndim属性,维度个数
- shape属性,各维度的大小
- dtype属性,数据类型
import numpy as np # 生成指定维度的随机多维数组 data = np.random.rand(2, 3) print(data) # 输出维度,各维度大小,数据类型 print(data.ndim,data.shape,data.dtype) [[0.01079846 0.78480752 0.20083994] [0.32519923 0.45055176 0.62211721]] 2 (2, 3) float64
# 创建多维数组 np.array(collection) l = range(10) data = np.array(l) print(data) [0 1 2 3 4 5 6 7 8 9]
# 创建特殊数组 (注意第一个参数是一个元组,第二个是类型) data1 = np.zeros((3, 4)) data2 = np.ones((3, 4)) data3 = np.empty((3, 4)) data4 = np.empty((3, 4), float) # 指定类型 [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]]
# 创建连续数组 arange data = np.arange(10) print(data)
arr = np.arange(10).reshape(5,2)
print(arr) [0 1 2 3 4 5 6 7 8 9]
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
import numpy as np # 数据类型转换 astype data = np.zeros((3, 4),dtype = np.float64) data2 = data.astype(np.int32) print(data) print(data2) [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] [[0 0 0 0] [0 0 0 0] [0 0 0 0]]
矢量化
- 矢量运算,相同大小的数组键间的运算应用在元素上(相同位置元素间的运算)
- 矢量和标量运算,“广播” - 将标量“广播”到各个元素(将标量拓展成和矢量相同维度的矢量再进行运算)
import numpy as np data = np.array([[1,2,3],[4,5,6]]) dat2 = np.array([[1,2,3],[4,5,6]]) print(data*data) # 元素相乘 print(data+data) # 元素相加 print(1+data) # 标量运算 [[ 1 4 9] [16 25 36]] [[ 2 4 6] [ 8 10 12]] [[2 3 4] [5 6 7]]
索引和切片
- 一维索引与列表相同
- 多维索引
- arr[r1:r2,c1:c2]
- arr[1,1]等价于arr[1][1]
data = np.array([[1,2,3],[4,5,6],[7,8,9]]) print(data[1: , 1: ]) [[5 6] [8 9]]
- 条件索引
- 布尔值多维数组 arr[condition] , condition可以是多个条件组合
- 注意多个条件之间用 & |
# 例:两个矩阵分别为年份和对应年份的数据,根据年份筛选数据 data = np.random.rand(3, 3) print(data) year = np.array([[2000,2001,2000], [2005,2002,2009], [2001,2003,2010]]) bools = year >= 2005 # 矢量与标量运算得到了一个布尔值矩阵 print(bools) filt = data[bools] # 和索引类似,根据布尔值矩阵取值 print(filt) filt2 = data[(year<=2005)&(year%2==0)] # 多条件一步完成 print(filt2) [[0.62446346 0.51132454 0.25793773] [0.21665339 0.93084313 0.35361838] [0.70143462 0.53508498 0.21204337]] [[False False False] [ True False True] [False False True]] [0.21665339 0.35361838 0.21204337] [0.62446346 0.25793773 0.93084313]
通用函数:
- 元素级运算
常用的通用函数
- ceil,向上最接近的整数
- floor,向下最接近的整数
- rint,四舍五入
- isnan,判断元素是否为NaN
- multiply,元素相乘
- divide,元素相除
import numpy as np arr = np.random.randn(2,3) print(arr) print(np.ceil(arr)) print(np.floor(arr)) [[ 0.73331615 0.12702309 -0.02600682] [-1.85277069 -0.38666438 -0.84873975]] [[ 1. 1. -0.] [-1. -0. -0.]] [[ 0. 0. -1.] [-2. -1. -1.]]
三元表达式:
- 矢量版本的三元表达式
- np.where(condition,x,y)
常用的统计方法
- np.man np.sum
- np.max np.min
- np.std np.var
- np.argmax np.argmin
- np.cusum np.cumprod
- 注意多维的话指定统计的维度,否则默认是全部维度上做统计
import numpy as np arr = np.random.randn(2,3) print(np.where(arr>0, 1, -1)) [[ 1 -1 -1] [ 1 -1 1]]
import numpy as np arr = np.arange(10).reshape(5,2) print(np.sum(arr)) # 所有相加 print(np.sum(arr, axis=0)) # 列元素相加 print(np.sum(arr, axis=1)) # 行元素相加 45 [20 25] [ 1 5 9 13 17]