python中Numpy的广播原则的代码解析


本文摘自php中文网,作者不言,侵删。

本篇文章给大家带来的内容是关于python中Numpy的广播原则的代码解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

为了了解这个原则,首先我们来看一组例子:

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

27

28

29

30

31

32

33

34

35

36

37

38

# 数组直接对一个数进行加减乘除,产生的结果是数组中的每个元素都会加减乘除这个数。

In [12]: import numpy as np

In [13]: a = np.arange(1,13).reshape((4, 3))

In [14]: a * 2

Out[14]: array([[ 2, 4, 6],

                [ 8, 10, 12],

                [14, 16, 18],

                [20, 22, 24]])

# 接下来我们看一下数组与数组之间的计算

In [17]: b = np.arange(12,24).reshape((4,3))

In [18]: b

Out[18]: array([[12, 13, 14],

                [15, 16, 17],

                [18, 19, 20],

                [21, 22, 23]])

In [19]: a + b

Out[19]: array([[13, 15, 17],

                [19, 21, 23],

                [25, 27, 29],

                [31, 33, 35]])

In [20]: c = np.array([1,2,3])

In [21]: a+c

Out[21]: array([[ 2, 4, 6],

                [ 5, 7, 9],

                [ 8, 10, 12],

                [11, 13, 15]])

In [22]: d = np.arange(10,14).reshape((4,1))

In [23]: d

Out[23]: array([[10],

                [11],

                [12],

                [13]])

In [24]: a + d

Out[24]: array([[11, 12, 13],

                [15, 16, 17],

                [19, 20, 21],

                [23, 24, 25]])

# 从上面可以看出,和线性代数中不同的是,m*n列的m行的一维数组或者n列的一维数组也是可以计算的。

这是为什么呢?这里要提到numpy的广播原则:

如果两个数组的后缘维度(从末尾开始算起的维度)轴长度相符其中一方的长度为1,则认为它们是广播兼容的。广播会在缺失维度和(或)轴长度为1的维度上进行。

在上面的代码中,a的维度是(4,3),c的维度是(1,3);d的维度是(4,1)。所以假设有两个数组,第一个的维度是(x_1, y_1, z_1),另一个数组的维度是(x_2, y_2, z_2),要判断这两个数组能不能进行计算,可以用如下方法来判断:

1

2

3

4

5

6

7

8

9

10

if z_1 == z_2 or z_1 == 1 or z_2 == 1:

    if y_1 == y_2 or y_1 == 1 or y_2 == 1:

        if x_1 == x_2 or x_1 == 1 or x_2 == 1:

            可以运算

        else:

            不可以运算

    else:

        不可以运算

else:

    不可以运算

这里需要注意:(3,3,2)和(3,2)是可以运算的,因为对于二维数组(3,2)也可以表示为(1,3,2),套用上述的规则是完全适用的,同理:(4,2,5,4)和(2,1,4)也是可以进行运算的。

以上就是python中Numpy的广播原则的代码解析的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python重命名和删除文件定义及作用(实例分析)

Python模拟微博登陆的方法介绍(附代码)

java后端如何调Python接口

Python语言和其他语言的区别

Python抓取网页乱码的原因及解决方法

如何卸载Python

Python如何求水仙花数?

Python字符串连接的几种方式总结

Python判断一个集合是否为另一个集合的子集方法

Python可以做网站吗

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...