numpy的一个很大的优点就是通过向量化,大幅提高运算效率,这里介绍一些常用的向量化函数。
一、where函数
numpy.where 函数是三元表达式x if condition else y 的向量化版本,常用于根据一个数组来生成一个新的数组。
假设有两个数值数组和一个布尔值数组:
a = np.array([2, 4, 9, 16])
b = np.array([1, 3, 10, 17])
c = np.array([True, False, False, True])
当c 中的元素为True 时,取a 中的元素,否则取b 中的元素,那么就可以用numpy.where 函数:
r = np.where(c, a, b)
r
其中,a 、b 可以为数组或标量。
二、数学和统计方法
许多关于计算整个数组统计值或关于轴向数据的数学函数,可以作为数组类型的方法被调用。像mean 、sum 等函数可以接收一个可选参数axis ,这个参数可以用于计算给定轴向上的统计值,形成一个下降一维度的数组,即axis=0 表示列上的统计值,axis=1 表示行上的统计值:
对于下列数组:
a = np.array([[1, 2, 3, 4], [3, 4, 5, 6], [5, 6, 7, 8], [7, 8, 9, 10]])
a
[ 3, 4, 5, 6],
[ 5, 6, 7, 8],
[ 7, 8, 9, 10]])
可计算平均值:
a.mean()
a.mean(0)
a.mean(1)
三、布尔值数组的方法
布尔值会被强制为1(True)和0(False),因此,sum 通常可以用于计算布尔值数组中的True的个数:
a = np.array([True, False, False, True])
a.sum()
除此之外,对于布尔值数组,还有两个非常有用的方法:any 和all 。any 检查数组中是否至少有一个True ,而all 检查是否每个值都是True :
a = np.array([True, False, False, True])
a.any()
a.all()
四、排序
和Python的内建列表类型相似,NumPy数组可以使用sort 方法按位置排序:
a = np.array([1, 0, 4, 2])
a.sort()
a
也可以在多维数组中根据传递的axis 值,沿着轴向对每个一维数据段进行排序:
a = np.array([[1, 3, 2], [2, 1, 3]])
a
[2, 1, 3]])
a.sort(axis=1)
a
[1, 2, 3]])
a.sort(axis=0)
a
[2, 3, 3]])
五、集合操作
NumPy包含一些针对一维ndarray的基础集合操作。常用的一个方法是np.unique ,返回的是数组中唯一值排序后形成的数组:
a = np.array([1, 3, 2, 3, 1, 2])
np.unique(a)
|