numpy 数组的计算

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)不可以进行运算,原因就是它们之间没有相同的维度。

再次说明结论:

只要有一个维度相同的俩个数组之间就可以运算,维度完全不同的俩个数组间不可以运算。@不论是二维还是多维!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值