ufunc 函數
全稱通用函數(universal function),是一種能夠對數組中所有元素進行操作的函數。以 Numpy 數組作爲輸出,因此不需要對數組每個元素都操作,比 math 庫中的函數操作效率更高。
(1)四則運算:加(+)、減(-)、乘(*)、除(/)、冪(**)。數組間的四則運算表示對每個數組中的元素分別進行四則運算,所以形狀必須相同。
(2)比較運算:>、<、==、>=、<=、!=。比較運算返回的結果是一個布爾數組,每個元素爲每個數組對應元素的比較結果。
(3)邏輯運算:np.any 函數表示邏輯“or”,np.all 函數表示邏輯“and”。運算結果返回布爾值。
ufunc 函數的廣播機制
廣播(broadcasting)是指不同形狀的數組之間執行算術運算的方式。需要遵循 4 個原則。
(1)讓所有輸入數組都向其中 shape 最長的數組看齊,shape 中不足的部分都通過在前面加1 補齊。
(2)輸出數組的 shape 是輸入數組 shape 的各個軸上的最大值。
(3)如果輸入數組的某個軸和輸出數組的對應軸的長度相同或者其長度爲 1 時,這個數組能夠用來計算,否則出錯。
(4)當輸入數組的某個軸的長度爲 1 時,沿着此軸運算時都用此軸上的第一組值
1.數組的四則運算
import numpy as np
x = np.array([1,2,3])
y = np.array([4,5,6])
print(x+y)
# 結果: [5 7 9]
print(x-y)
# 結果: [-3 -3 -3]
print(x*y)
# 結果: [4 10 18]
print(x/y)
# 結果: [0.25 0.4 0.5 ]
print(x**y)
# 結果: [1 32 729]
2.數組比較運算
import numpy as np
x = np.array([1,5,7])
y = np.array([4,5,6])
print(x<y)
# 結果: [True False False]
print(x>y)
# 結果: [False False True]
print(x==y)
# 結果: [False True False]
print(x<=y)
# 結果: [True True False]
print(x>=y)
# 結果: [False True True]
print(x!=y)
# 結果: [True False True]
3.邏輯運算
import numpy as np
x = np.array([1,5,7])
y = np.array([4,5,6])
print('邏輯and運算: ',np.all(x==y)) # 存在一假爲假 1!=4,7!=6
# 結果: False
print('邏輯or運算: ',np.any(x==y)) # 存在一真爲真 5==5
# 結果: True
4.廣播機制
(1)一維廣播
import numpy as np
arr1 = np.array([[0,0,0],[1,1,1],[2,2,2,],[3,3,3]])
print(arr1)
# 結果:
# [[0 0 0]
# [1 1 1]
# [2 2 2]
# [3 3 3]]
print(arr1.shape)
# 結果: (4, 3)
arr2 = np.array([1,2,3])
# print(arr2)
# 結果: [1 2 3]
# print(arr2.shape)
# 結果: (3,)
arr3 = arr1 + arr2 # 以列爲基準,arr1的每一行的每個列值都加上對應arr2的列值
# [0 0 0] + [1,2,3] = [1 2 3]
# [1 1 1] + [1,2,3] = [2 3 4]
# [2 2 2] + [1,2,3] = [3 4 5]
# [3 3 3] + [1,2,3] = [4 5 6]
# print(arr3)
# 結果:
# [[1 2 3]
# [2 3 4]
# [3 4 5]
# [4 5 6]]
(2)二維廣播
import numpy as np
arr1 = np.array([[0,0,0],[1,1,1],[2,2,2,],[3,3,3]])
print(arr1)
# 結果:
# [[0 0 0]
# [1 1 1]
# [2 2 2]
# [3 3 3]]
arr2 = np.array([1,2,3,4]).reshape((4,1))
print(arr2)
# 結果:
# [[1]
# [2]
# [3]
# [4]]
arr3 = arr1 + arr2 # 以行爲基準,arr1的每一行的所有列值都加上對應arr2的行值
# [0 0 0] + [1] = [1 1 1]
# [1 1 1] + [2] = [3 3 3]
# [2 2 2] + [3] = [5 5 5]
# [3 3 3] + [4] = [7 7 7]
print(arr3)
# 結果:
# [[1 1 1]
# [3 3 3]
# [5 5 5]
# [7 7 7]]