一、用于布尔型数组的方法
布尔值在进行数学统计方法时会被强制转换为1(True)和0(False)。因此,sum经常被用来对布尔型数组中的True值进行计数。
1 2 3 4 5 6
| import numpy as np arr = np.random.randon(100) print((arr > 0).sum())
print(56)
|
any和all方法对布尔型数组非常有用。any用于测试数组中是否存在一个或多个True,而all则检查数组中所有值是否都是True:
1 2 3 4 5 6 7 8
| ··· bools = np.array([False, True, True, False]) print(bools.any()) print(bools.all())
True False
|
这两个方法也能用于非布尔型数组,所有非0元素将会被当做True。
二、排序
2.1 一维数组
Numpy数组也可以通过sort方法进行就地(inplace)排序。
1 2 3 4 5 6 7 8 9 10 11 12 13
| import numpy as np arr = np.random.randn(6) print("-----arr-----") print(arr) print("-----arr.sort()----") arr.sort() print(arr)
----arr---- [-0.44877877 0.48207511 -0.70813612 -1.47470048 -0.48642976 -1.36405692] ----arr.sort()---- [-1.47470048 -1.36405692 -0.70813612 -0.48642976 -0.44877877 0.48207511]
|
2.2 多维数组
多维数组可以在任意一个轴上进行排序,只需要将轴编号传递给sort即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import numpy as np arr = np.random.randon(5, 3) print('----arr----') print(arr) print('----arr.sort(1)----') arr.sort(1) print(arr)
----arr----- [[-1.16948324 -0.30273131 -0.93708784] [ 0.61541511 0.99204474 1.27347233] [-0.86614243 1.08452133 0.36962142] [ 0.15675404 0.589467 -0.04253482] [-0.12645503 1.07969955 -1.71821312]] -----arr.sort(1)---- [[-1.16948324 -0.93708784 -0.30273131] [ 0.61541511 0.99204474 1.27347233] [-0.86614243 0.36962142 1.08452133] [-0.04253482 0.15675404 0.589467 ] [-1.71821312 -0.12645503 1.07969955]]
|
顶级方法np.sort返回的是数组的已排序副本,而不是inplace操作。计算数组分位数做简单的方法是对其进行排序,然后选取特定位置的值:
1 2 3 4 5 6 7
| import numpy as np large_arr = np.random.randn(1000) large_arr.sort() print(large_arr[int(0.05 * len(large_arr))])
-1.6379662816801295
|
三、唯一化以及其他的集合逻辑
NumPy提供了一些针对一维ndarray的基本集合运算。最常用的可能要数np.unique了,它用于找出数组中的唯一值并返回已排序的结果:
1 2 3 4 5 6 7 8 9
| import numpy as np names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe']) print(np.unique(names)) ints = np.array([3, 3, 3, 2, 2, 1, 1, 4, 4]) print(np.unique(ints))
['Bob' 'Joe' 'Will'] [1 2 3 4]
|
函数np.in1d用于测试一个数组中的值在另一个数组中的成员资格,返回一个布尔型数组:
1 2 3 4 5 6
| ··· values = np.array([6, 0, 0, 3, 2, 5, 6]) print(np.in1d(values, [2,3,6]))
[ True False False True True False True]
|