不同形状的数组运算时,会进行广播处理

1,让所有输入数组都向其中维度最多的数组看齐,shape属性中不足的部分都通过在前面加1补齐

2,输出数组的shape属性是输入数组的shape属性的各个轴上的最大值

3,如果输入数组的某个轴的长度为1或与输出数组的对应轴的长度相同,这个数组能够用来计算,否则出错

4,当输入数组的某个轴的长度为1 时,沿着此轴运算时都用此轴上的第一组值

例1

import numpy as np

# -1表示该轴的数目自动计算

a = np.arange(0, 60, 10).reshape(-1, 1)

print(a)

print(a.shape)

# [[ 0]

# [10]

# [20]

# [30]

# [40]

# [50]]

# (6, 1)

b = np.arange(0, 5)

print(b)

print(b.shape)

# [0 1 2 3 4]

# (5,)

c = a + b

print(c)

print(c.shape)

# [[ 0 1 2 3 4]

# [10 11 12 13 14]

# [20 21 22 23 24]

# [30 31 32 33 34]

# [40 41 42 43 44]

# [50 51 52 53 54]]

# (6, 5)

由于a,b维数不同,根据规则1,需要让b的shape属性向a对齐,于是在b的shape属性前加1,变为(1,5)[[0 1 2 3 4]]

这样加法运算的两个输入数组的shape属性分别为(6,1)(1,5),根据规则2,输出数组的各个轴的长度为输入数组各个轴的长度的最大值,可知输出数组的shape属性为(6,5)

由于b的第0轴长度为1,而a的第0轴长度为6,为了能够让他们在第0轴上相加,需要将b的第0轴的长度扩展为6,相当于

b = np.arange(0, 5).reshape(1, 5)

bb = np.repeat(b, 6, axis=0)

print(bb)

print(bb.shape)

[[0 1 2 3 4]

[0 1 2 3 4]

[0 1 2 3 4]

[0 1 2 3 4]

[0 1 2 3 4]

[0 1 2 3 4]]

(6, 5)

由于a的第1轴的长度为1,而b的第一轴长度为5,需要将a的第一轴拓展为5,相当于

a = np.arange(0, 60, 10).reshape(-1, 1)

aa = a.repeat(5, axis=1)

print(aa)

print(aa.shape)

[[ 0 0 0 0 0]

[10 10 10 10 10]

[20 20 20 20 20]

[30 30 30 30 30]

[40 40 40 40 40]

[50 50 50 50 50]]

(6, 5)

这样a和b就能进行计算了

在计算时numpy并不会真的使用repeat进行拓展,这样太浪费内存空间了,由于这种广播计算很长用,使用ogrid对象创建广播计算数组

import numpy as np

x, y = np.ogrid[:5, :5]

print(x)

print(x.shape)

print(y)

print(y.shape)

[[0]

[1]

[2]

[3]

[4]]

(5, 1)

[[0 1 2 3 4]]

(1, 5)

使用mgrid获取进行广播之后的数组

import numpy as np

x, y = np.mgrid[:5, :5]

print(x)

print(x.shape)

print(y)

print(y.shape)

[[0 0 0 0 0]

[1 1 1 1 1]

[2 2 2 2 2]

[3 3 3 3 3]

[4 4 4 4 4]]

(5, 5)

[[0 1 2 3 4]

[0 1 2 3 4]

[0 1 2 3 4]

[0 1 2 3 4]

[0 1 2 3 4]]

(5, 5)

ogrid和多维数组一样,用切片作为下标,返回的是一组可以用来广播计算的数组,其切片下标有两种形式

1,开始值:结束值:步长,和np.arrange()类似

2,开始值:结束值:长度j,当第三个参数为虚数时,他表示返回的数组的长度,和linspace类似

可以很方便的绘制曲面图

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

x, y = np.ogrid[-2:2:20j, -2:2:20j]

z = x * np.exp(-x ** 2 - y ** 2)

# (20, 1) (1, 20) (20, 20)

print(x.shape, y.shape, z.shape)

figure = plt.figure()

ax = Axes3D(figure)

ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='rainbow')

plt.show()

python广播机制是什么意思_Python numpy 广播机制相关推荐

  1. python arg_python argmin_python中argmin函数_Python numpy.argmin(

    numpy.argmin(array,axis = None,out = None):返回特定轴上数组min元素的索引. 参数: array:Input array to work on axis : ...

  2. python代码大全和用法用量_Python numpy.stack()用法及代码示例

    numpy.stack()函数用于沿新轴连接相同尺寸数组的序列.axis参数指定结果轴尺寸中新轴的索引.例如,如果axis = 0,它将是第一个尺寸:如果axis = -1,它将是最后的尺寸. 用法: ...

  3. python内存管理错误的是_Python内存管理机制

    俗话说,出来混早晚要还的,Python还有很多知识点没有总结成博客,欠了太多,先还一部分吧 1. Python对象的内存使用 内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言 ...

  4. [转载] python中dtype的使用规范_Python numpy.dtype() 使用实例

    参考链接: Python中的numpy.extract The following are code examples for showing how to use . They are extrac ...

  5. python生成二维坐标点_Python numpy:根据坐标创建二维数组

    假设文件中的x和y值直接对应于索引(就像在您的示例中那样),您可以执行与此类似的操作: import numpy as np x = [0, 0, 1, 1, 2, 2] y = [1, 2, 0, ...

  6. python中mean算函数吗_Python numpy.mean函数方法的使用

    numpy.mean numpy.mean(a, axis=None, dtype=None, out=None, keepdims= 沿指定轴计算算术平均值. 返回数组元素的平均值.默认情况下,平均 ...

  7. python 元组与数组的区别_python – NumPy – 从元组到数组的高效转换?

    我试图找到一种有效的方法,从元组(每4个条目对应一个像素的R,G,B,alpha)转换为NumPy数组(用于OpenCV). 更具体地说,我使用pywin32来获取窗口的客户区位图.这以元组的形式返回 ...

  8. python去掉最高最低求平均值_python – NumPy:计算去除NaNs的平均值

    我想你想要的是一个masked数组: dat = np.array([[1,2,3], [4,5,nan], [nan,6,nan], [nan,nan,nan]]) mdat = np.ma.mas ...

  9. python np array 减去一个数_python numpy减去矩阵元素

    使用numpy,我如何相互减去矩阵的numpy数组的元素? a = np.array([ [ [1., 2., 3.], [4., 5., 6.], [7., 8., 9.] ], [ [20., 2 ...

最新文章

  1. Android 透明度百分比对应的 十六进制
  2. 不可错过的javascript迷你库
  3. java - 线程1打印1-10,当线程打印到5后,线程2打印“hello”,然后线程1继续打印...
  4. MATLAB随机信号统计特征
  5. 再高深的 Python 面试难题,这门课都给你整得明明白白!
  6. 实验-网页动画(js版)
  7. 【自定义控件】自定义属性
  8. solr 启动、停止
  9. 3D模型格式解析(OBJ)
  10. php 发送多个,向多个地址发送邮件的php类
  11. 基于python的图书管理系统设计与实现论文_图书馆管理系统的设计与实现毕业论文...
  12. oracle可以只装客户端吗,我想在linux下只装oracle客户端行吗?怎么装?
  13. python3:从 logging 库中摘‘零件’另造小轮子 简单日志功能
  14. java里面default是什么意思_default_default是什么意思???
  15. ue4加载本地图片_UE4 读取本地图片
  16. 前端必会的anime动画库
  17. 5月17号软件资讯更新合集....
  18. Facebook pop
  19. vulnhub——Bulldog2
  20. 三星笔记本bios设置里找不到U盘启动盘的解决方法

热门文章

  1. 人机关系一线牵——从注意力的视角审视人机关系
  2. Android LCD(一):LCD基本原理【转】
  3. Unity-网络开发(二)
  4. 自然数拆分Lunatic版
  5. More effective C++学习总结
  6. Mysql之MyISAM存储引擎
  7. 怎样训练左右手协调_教你克服学钢琴时左右手协调的问题
  8. 『重磅』免费无限量下载知网/万方/维普等数据库文献的正规渠道
  9. matlab主成分分析散点图_基于matlab的主成分分析与因子分析
  10. SpringCloud熔断器Hystrix