numpy思维导图

广播机制
if a.shape=b.shape: a 和 b 的运算仅在对应位置上进行
else: 广播机制 使形状较小的进行广播使之与形状较大的兼容
当a.shape=(3,5),b.shape=(4,2)
====>a,b.reshape(4,5),但此时不符合广播原则故而不可以计算
a.shape= (2,3,5),b.shape=(3,1)====>a,b.reshape(2,3,5)
规律:要么对应维度上对应数值相同,要么有空位或有“1” 位
import numpy as np
a=np.arange(18).reshape((2,3,3))
b=np.arange(3).reshape(3,1)
print(a+b)[[[ 0 1 2]
[ 4 5 6]
[ 8 9 10]]
[[ 9 10 11]
[13 14 15]
[17 18 19]]]import numpy as np
a=np.arange(15).reshape((3,5))
b=np.arange(2).reshape(1,2)
print(a+b)
print(a+b)
ValueError: operands could not be broadcast together with shapes (3,5) (1,2) 数组的复制问题
import numpy as np
a=np.arange(15).reshape((3,5))
print("***"*3+"a is :"+"***"*3)
print(a)
c=a
print("***"*3+"c is :"+"***"*3)
print(c)
c[0][0]=9
print("***"*3+"a[0][0] is :"+"***"*3)
print(a[0,0])*********a is :*********
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
*********c is :*********
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
*********a[0][0] is :*********
9上例中说明当改变c的值,a的值也会随之改变。可理解为通过“=”进行复制后,a,c共享同一段存储空间,此时a,c对该段数据均有处理能力。此外,列表复制也类似上述所谈,即引用传值。
在数组中解决上述问题可采用c=np.array(a)或者c=a.copy()
import numpy as np
a=np.arange(15).reshape((3,5))
print("***"*3+"a is :"+"***"*3)
print(a)
c=np.array(a)
print("***"*3+"c is :"+"***"*3)
print(c)
c[0][0]=9
print("***"*3+"a[0][0] is :"+"***"*3)
print(a[0,0])
d=a.copy()
print("***"*3+"d is :"+"***"*3)
print(d)
d[0][0]=9
print("***"*3+"a[0][0] is :"+"***"*3)
print(a[0,0])*********a is :*********
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
*********c is :*********
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
*********a[0][0] is :*********
0
*********d is :*********
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
*********a[0][0] is :*********
0
版权声明:本文为m0_66447617原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。