博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Numpy中的广播原则/机制
阅读量:6276 次
发布时间:2019-06-22

本文共 1600 字,大约阅读时间需要 5 分钟。

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

# 数组直接对一个数进行加减乘除,产生的结果是数组中的每个元素都会加减乘除这个数。In [12]: import numpy as npIn [13]: a = np.arange(1,13).reshape((4, 3))In [14]: a * 2Out[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]: bOut[18]: array([[12, 13, 14],                [15, 16, 17],                [18, 19, 20],                [21, 22, 23]])In [19]: a + bOut[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+cOut[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]: dOut[23]: array([[10],                [11],                [12],                [13]])In [24]: a + dOut[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),要判断这两个数组能不能进行计算,可以用如下方法来判断:

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)也是可以进行运算的。

转载地址:http://tagpa.baihongyu.com/

你可能感兴趣的文章
Linux系统固定IP配置
查看>>
配置Quartz
查看>>
Linux 线程实现机制分析
查看>>
继承自ActionBarActivity的activity的activity theme问题
查看>>
设计模式01:简单工厂模式
查看>>
项目经理笔记一
查看>>
Hibernate一对一外键双向关联
查看>>
mac pro 入手,php环境配置总结
查看>>
MyBatis-Plus | 最简单的查询操作教程(Lambda)
查看>>
rpmfusion 的国内大学 NEU 源配置
查看>>
spring jpa 配置详解
查看>>
IOE,为什么去IOE?
查看>>
java 用反射简单应用,将Object简单转换成map
查看>>
Storm中的Worker
查看>>
dangdang.ddframe.job中页面修改表达式后进行检查
查看>>
Web基础架构:负载均衡和LVS
查看>>
Linux下c/c++相对路径动态库的生成与使用
查看>>
SHELL实现跳板机,只允许用户执行少量允许的命令
查看>>
SpringBoot 整合Redis
查看>>
2014上半年大片早知道
查看>>