数学和统计方法
平均值、和
1 | import numpy as np |
1 | arr |
array([[-0.74501213, 0.08417854, -1.75874197, 1.02433555],
[ 0.69482999, -0.77008213, -0.60746266, 0.15098635],
[-0.19760563, -0.00750139, 1.61108572, -0.74922113],
[-1.10606169, 0.83800608, -0.50852532, -1.50990056],
[-1.55019076, -2.07183149, -0.30625562, -0.23447214]])
1 | arr.mean() #平均值 |
-0.38597211999176573
1 | np.mean(arr) #也可以用numpy全局函数 |
-0.38597211999176573
1 | arr.sum() #所有元素的和 |
-7.7194423998353141
1 | arr.mean(axis=1) #按轴1(即按列)计算平均值,各列相加再除以列数求平均数,得数的个数为行数 |
array([-0.34881 , -0.13293211, 0.16418939, -0.57162037, -1.0406875 ])
1 | arr.sum(axis=0) #按轴0(即按行)计算平均值,各行相加再除以行数求平均数,得数的个数为列数 |
array([-2.90404022, -1.92723039, -1.56989985, -1.31827194])
累加和与积函数
1 | arr = np.array([0, 1, 2, 3, 4, 5, 6, 7]) |
1 | arr.cumsum() #累加和 |
array([ 0, 1, 3, 6, 10, 15, 21, 28], dtype=int32)
1 | arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) |
1 | arr |
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
1 | arr.cumsum(axis=0) #按轴0,即按行累加 |
1 | arr.cumprod(axis=1) #按轴1,即按列累乘 |
array([[ 0, 0, 0],
[ 3, 12, 60],
[ 6, 42, 336]], dtype=int32)
基本数组统计方法
方法 | 描述 |
---|---|
sum | 数组元素和,可选参数:轴 |
mean | 算数平均值 |
std, var | 标准差 |
min, max | 最小和最大值 |
argmin, argmax | 最小和最大元素所在的位置索引 |
cumsum | 累加和 |
cumprod | 累加积 |
布尔数组有关方法
上面的方法中,对于布尔值的数组,布尔值与1(True)和0(False)等价。
1 | arr = np.random.randn(100) |
42
1 | bools = np.array([False, False, True, False]) |
True
1 | bools.all() #数组中所有元素为True,all()方法才能返回True,否则为False |
False
排序
sort方法原地修改源数组,但全局函数np.sort()创建一个排序后的数组拷贝,而不是改变原数组。
1 | arr = np.random.randn(6) |
array([ 2.12344061, 0.1013188 , 0.41783073, 3.31179217, 1.15477831,
2.17607684])
1 | arr.sort() |
array([ 0.1013188 , 0.41783073, 1.15477831, 2.12344061, 2.17607684,
3.31179217])
下面一个例子,数组可按轴排序。
1 | arr = np.random.randn(5, 3) |
array([[-0.79889695, 1.02591275, 0.16768367],
[-0.15944299, -0.22921454, -0.37237582],
[-1.58865821, -0.93659296, 0.72416659],
[-0.48231842, -0.95794791, -0.69966767],
[ 1.4034206 , 1.3355452 , -0.19016655]])
1 | arr.sort(1) #列排序 |
array([[-0.79889695, 0.16768367, 1.02591275],
[-0.37237582, -0.22921454, -0.15944299],
[-1.58865821, -0.93659296, 0.72416659],
[-0.95794791, -0.69966767, -0.48231842],
[-0.19016655, 1.3355452 , 1.4034206 ]])
下面一个例子说明,可以以排序方法来快速计算一个数列的分位数。
1 | large_arr = np.random.randn(1000) |
-1.6172219056866222
唯一及其他集合方法
1 | names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe']) |
array(['Bob', 'Joe', 'Will'],
dtype='<U4')
1 | ints = np.array([3, 3, 3, 2, 2, 1, 1, 4, 4]) |
array([1, 2, 3, 4])
1 | sorted(set(names)) #对比一下,这是python的原生替代方法 |
['Bob', 'Joe', 'Will']
1 | values = np.array([6, 0, 0, 3, 2, 5, 6]) |
array([ True, False, False, True, True, False, True], dtype=bool)
集合类函数简表
方法 | 描述 |
---|---|
unique(x) | 计算数组x中的不重复元素,并排序 |
intersect1d(x, y) | 数组x和y的交集 |
union1d(x, y) | 并集 |
in1d(x, y) | 计算数组x中的元素是否在数组y中,产生一个与x对应的Bool数组 |
setdiff1d(x, y) | 集合x与y的差集 |
setxor1d(x, y) | 集合X和Y的异或并集,即两者并集减去交集 |