1.数组与数字间的计算(广播机制)
import numpy as num
# 先创建一个二维数组shape(2,3)
shuzu3 = num.array([[0, 2, 3], [4, 5, 6]])
print(shuzu3)
print()
print(shuzu3+3)
结果如下:
[[0 2 3]
[4 5 6]]
[[3 5 6]
[7 8 9]]
结果表明:二位数组中的每个数字都加了3,这就是广播机制,这里只列举了加法,在数组与数字的运算中,加减乘除都符合广播机制。
另外,一种特殊情况,那就是除法,如果除以零是什么情况呢,请看如下代码:
print(shuzu3)
print()
print(shuzu3/0)
结果如下:
[[0 2 3]
[4 5 6]]
[[nan inf inf]
[inf inf inf]]
根据广播机制,每个数字都除以0,结果就是这样。
,
2.数组和数组间的运算
<1>.维度完全相同的俩个数组间的运算
shuzu5 = num.arange(1000,1006).reshape((2,3))
print(shuzu5)
print()
print(shuzu5+shuzu3)
结果如下:
[[1000 1001 1002]
[1003 1004 1005]]
[[1000 1003 1005]
[1007 1009 1011]]
结论:
如果俩个数组维度完全相同,那么它们之间的运算就是每个对应的数字间的运算。结果如上
,
,
<2>.维度不完全相同或者完全不同的俩个数组间的运算(这里以一维数组和二维数组举例)
(1)按横行看
shuzu7 = num.arange(100,103).reshape((1,3))
print(shuzu7)
print()
print(shuzu3-shuzu7)
结果如下:
[[100 101 102]]
[[-100 -99 -99]
[ -96 -96 -96]]
结果表明:shuzu7是一个一维维度,而shuzu3是一个二维维度,按横行看,它们的shape形状一样,可以进行运算,shuzu3每一横行的数字都一一对应的减去了shuzu7中的数字,结果如上。
(2)按纵行看
shuzu8 = num.arange(2).reshape((2,1))
print(shuzu8)
print()
print(shuzu8+shuzu3)
结果如下:
[[0]
[1]]
[[0 2 3]
[5 6 7]]
结果表明:shuzu3是一个二维数组,shuzu8也是一个二维数组,按总行看它们的shape形状相同,所以可以进行运算,所以shuzu3的每一纵行的数字一一对应加上shuzu8的每一个数字,结果如上。
(3)维度都不同的俩个数组间的运算
shuzu9 = num.arange(10,14).reshape((2,2))
print(shuzu9)
print()
print(shuzu9+shuzu3)
结果如下:
ValueError: operands could not be broadcast together with shapes (2,2) (2,3)
报错!!
,
综上总结:只要有一个维度相同的俩个数组之间就可以运算,维度完全不同的来个数组间不可以运算。
<3>.三维数组和二维数组间的运算
问题:
一个三维数组shape(3,3,3)和一个二维数组shape(3,2)可以进行计算吗? no!!!!
一个三维数组shape(3,3,3)和一个二维数组shape(3,2)可以进行计算吗? yes!!!!
代码演示:
shuzu6 = num.arange(0,27).reshape((3,3,3))
shuzu4 = num.arange(0,6).reshape((3,2))
shuzu2 = num.arange(0,9).reshape((3,3))
print(50*"-")
print(shuzu6)
print(50*"-")
print(shuzu2)
print(50*"-")
print(shuzu6+shuzu2)
结果如下:
--------------------------------------------------
[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]]
[[ 9 10 11]
[12 13 14]
[15 16 17]]
[[18 19 20]
[21 22 23]
[24 25 26]]]
--------------------------------------------------
[[0 1 2]
[3 4 5]
[6 7 8]]
--------------------------------------------------
[[[ 0 2 4]
[ 6 8 10]
[12 14 16]]
[[ 9 11 13]
[15 17 19]
[21 23 25]]
[[18 20 22]
[24 26 28]
[30 32 34]]]
结果表明:
一个三维数组shape(3,3,3)和一个二维数组shape(3,2)可以进行运算,原因同上面所述一样,因为shuzu6和shuzu2之间有相同的维度,所以它们之间可以进行运算。
一个三维数组shape(3,3,3)和一个二维数组shape(3,2)不可以进行运算,原因就是它们之间没有相同的维度。
再次说明结论:
只要有一个维度相同的俩个数组之间就可以运算,维度完全不同的俩个数组间不可以运算。@不论是二维还是多维!