NumPy-ufunc 函数

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(xy)
# 结果: [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]]

 

你可能感兴趣的