1.特点
(1)uFanc通用函数:能够对array中的左右元素进行操作的函数。
(2)Broadcasting指对不同形状的array之间执行算数运算的方式。
(3)不同形状的数组运算时,Numpy则会执行广播机制
(4)Numpy能够运用向量化运算处理整个数组,所以速度会比较快。
广播运算机制
1.行数补齐:
2.列数补齐:
注意,执行 broadcast 的前提在于,两个 ndarray 执行的是 element-wise(按位加,按位减) 的运算,而不是矩阵乘法的运算,矩阵乘法运算时需要维度之间严格匹配。(且矩阵乘法,np.dot(A, B) 如果维度不匹配,提示的错误不会是 broadcast,而是 aligned)
arr1 = np.array([[0, 1, 3],[4, 2, 9],[4,5,9],[1,-3,4]])
arr3 = np.array([1,2,3])
arr4 = arr3 + arr1
print(arr4)
[[ 1 3 6]
[ 5 4 12]
[ 5 7 12]
[ 2 -1 7]]
2. 函数运算
Numpy函数运算遵循向量规则,同时进行,因此效率比循环高。
(1)基础数学运算
arr_1 = np.array([2,6,8,3,7,9])
arr_2 = np.array([5,6,4,7,3,2])
arr_3 = np.array([9,7,5,1,8,3])
total = arr_1+arr_2+arr_3
#加法函数
a = np.add(arr_1,arr_2)#两个数组
b = np.add(arr_1,np.add(arr_2,arr_3))#多数组
#减法函数
c = np.subtract(arr_1,arr_2)
print(a,'\n',b,'\n',c)
#除法函数
d = np.divide(arr_1,np.divide(arr_2,100)**2)
#乘法函数
e = np.multiply(arr_1,arr_2)
print(a,'\n',b,'\n',c,'\n',d,'\n',e)
[ 7 12 12 10 10 11]
[16 19 17 11 18 14]
[-3 0 4 -4 4 7]
[ 800. 1666.66666667 5000. 612.24489796
7777.77777778 22500. ]
[10 36 32 21 21 18]
#幂运算
print(np.power(arr_2,3))
[125 216 64 343 27 8]
上述四种函数也可以直接用运算符号表示,此处仅作了解
(2)集合运算
arr_1 = np.array([2,6,2,3,7,9])
test = [2,3 ,8]
#去重并自动排序
a = np.unique(arr_1)
#测试前一个数组中元素在后一个数组中是否存在
b = np.in1d(arr_1, test)
c = np.in1d(test, arr_1)
#求交集
d = np.intersect1d(arr_1,test)
#....并集,补集
print(arr_1,'\n',a,'\n',b,'\n', c,'\n', d)
[2 6 2 3 7 9] #不该变元数组
[2 3 6 7 9]
[ True False True True False False]
[ True True False]
[2 3]
(3)比较运算
arr_1 = np.array([[1,2,3],[4,5,6]])
arr_2 = np.array([2,7,6])
#广播机制补齐后按位比较
print(arr_1 ==arr_2)
print(np.greater(arr_1,arr_2))
print(arr_1>arr_2)
[[False False False]
[False False True]]
[[False False False]
[ True False False]]
[[False False False]
[ True False False]]
(4)逻辑运算
arr_2 = np.array([2,7,0])
print(arr_2.any())#任意元素为真,输出True
print(arr_2.all())#所有元素为真,输出True
True
False
3.搜索与排序
import numpy as np
s = np.array([1,3,7,4,9,6,2,6])
a = np.sort(s)#数组排序,默认升序
b = sorted(s)#列表排序,默认升序
c = np.array(sorted(s, reverse = True))#数组排序,reverse参数降序
print(s,a,b,c)
#[1 3 7 4 9 6 2 6]
# [1 2 3 4 6 6 7 9]
# [1, 2, 3, 4, 6, 6, 7, 9]
# [9 7 6 6 4 3 2 1]
d = np.argsort(s)
print(d)
#列表排序,输出为排序后元素对应排序前索引
#[0 6 1 3 5 7 2 4]
p = np.array([[1,2,3],[5,2,9],[4,1,3]])
a1 = p.argmax(axis = 0)#[1 0 1]
b1 = p.argmin(axis = 1)#[0 1 1]
c1 = p.max(axis = 0)#[5 2 9]
d1 = p.min(axis = 1)#[1 2 1]
print(a1,b1,c1,d1)
arr= np.arange(9).reshape(3,3)
a2 = np.where(arr>p, arr, p)#满足条件,返回arr,否则,返回p
#向量化操作,效率高,同时对所有元素进行操作
#[[1 2 3]
#[5 4 9]
#[6 7 8]]
b2 = np.extract(arr>p,arr)
#[4 6 7 8]
#条件化操作,只提取满足条件的元素并输出
print(arr>p)
#[[False False False]
#[False True False]
#[ True True True]]