numpy 不同形状(shape)的数组数值计算方式
1.如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。
import numpy as np
a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])
c = a * b
print(c) # [1*5,2*6,3*7,4*8]
# 结果 [ 5 12 21 32]
2.当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制。如:
import numpy as np
a = np.array([[ 0, 0, 0],
[10,10,10],
[20,20,20],
[30,30,30]])
b = np.array([1,2,3])
print(a + b)
# 结果:(原理往下看)
'''[[ 1 2 3]
[11 12 13]
[21 22 23]
[31 32 33]]'''
4x3 的二维数组与长为 3 的一维数组相加,等效于把数组 b 在二维上重复 4 次再运算:
下面的图片展示了数组 b 如何通过广播来与数组 a 兼容。
具体下边可表示
import numpy as np
a = np.array([[ 0, 0, 0], [10,10,10], [20,20,20], [30,30,30]])
b = np.array([1,2,3])
bb = np.tile(b, (4, 1))
print(a + bb)
# 结果:
"""[[ 1 2 3]
[11 12 13]
[21 22 23]
[31 32 33]]"""
3.numpy.tile(A,代表)
通过重复A代表给出的次数来构造数组
tile怎么执行的,有两个要点
(1)比较数组维度d和元组维度reps,如果d<reps,在需要时对数组补中括号 [] 来增加维度。 (2)元组数字从右到左,数组维度从最深维度到最低维度。假设元组为(a,b,c,d,e,f),则数组最深维度重复f次;然后次深维度重复e次;接着次次深维度重复d次;再然后次次次深维度重复c次…… 以此类推,直到对最低维度重复a次,结束,得到结果
import numpy as np
a = np.array([0, 1, 2])
b = np.tile(a,2)
print(b)
print('***********************')
c = np.tile(a, (2, 1))
print (c)
print('***********************')
d = np.tile(a, (2, 2, 1)) # 具体计算过程见下
print(d)
print('***********************')
e = np.array([[1, 2], [3, 4]])
f = np.tile(e, 2)
print(f)
print('***********************')
g = np.tile(e, (2, 1))
print(g)
print('***********************')
h = np.array([1,2,3,4])
i = np.tile(h,(4,1))
print(i)
# 结果
b = [0 1 2 0 1 2]
***********************
c = [[0 1 2 0 1 2]
[0 1 2 0 1 2]]
***********************
d = [[[0 1 2]
[0 1 2]]
[[0 1 2]
[0 1 2]]]
***********************
f = [[1 2 1 2]
[3 4 3 4]]
***********************
g = [[1 2]
[3 4]
[1 2]
[3 4]]
***********************
i = [[1 2 3 4]
[1 2 3 4]
[1 2 3 4]
[1 2 3 4]]
d 过程见下