python广播机制是什么意思_Python numpy 广播机制
不同形状的数组运算时,会进行广播处理
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 广播机制相关推荐
- python arg_python argmin_python中argmin函数_Python numpy.argmin(
numpy.argmin(array,axis = None,out = None):返回特定轴上数组min元素的索引. 参数: array:Input array to work on axis : ...
- python代码大全和用法用量_Python numpy.stack()用法及代码示例
numpy.stack()函数用于沿新轴连接相同尺寸数组的序列.axis参数指定结果轴尺寸中新轴的索引.例如,如果axis = 0,它将是第一个尺寸:如果axis = -1,它将是最后的尺寸. 用法: ...
- python内存管理错误的是_Python内存管理机制
俗话说,出来混早晚要还的,Python还有很多知识点没有总结成博客,欠了太多,先还一部分吧 1. Python对象的内存使用 内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言 ...
- [转载] python中dtype的使用规范_Python numpy.dtype() 使用实例
参考链接: Python中的numpy.extract The following are code examples for showing how to use . They are extrac ...
- python生成二维坐标点_Python numpy:根据坐标创建二维数组
假设文件中的x和y值直接对应于索引(就像在您的示例中那样),您可以执行与此类似的操作: import numpy as np x = [0, 0, 1, 1, 2, 2] y = [1, 2, 0, ...
- python中mean算函数吗_Python numpy.mean函数方法的使用
numpy.mean numpy.mean(a, axis=None, dtype=None, out=None, keepdims= 沿指定轴计算算术平均值. 返回数组元素的平均值.默认情况下,平均 ...
- python 元组与数组的区别_python – NumPy – 从元组到数组的高效转换?
我试图找到一种有效的方法,从元组(每4个条目对应一个像素的R,G,B,alpha)转换为NumPy数组(用于OpenCV). 更具体地说,我使用pywin32来获取窗口的客户区位图.这以元组的形式返回 ...
- python去掉最高最低求平均值_python – NumPy:计算去除NaNs的平均值
我想你想要的是一个masked数组: dat = np.array([[1,2,3], [4,5,nan], [nan,6,nan], [nan,nan,nan]]) mdat = np.ma.mas ...
- python np array 减去一个数_python numpy减去矩阵元素
使用numpy,我如何相互减去矩阵的numpy数组的元素? a = np.array([ [ [1., 2., 3.], [4., 5., 6.], [7., 8., 9.] ], [ [20., 2 ...
最新文章
- Android 透明度百分比对应的 十六进制
- 不可错过的javascript迷你库
- java - 线程1打印1-10,当线程打印到5后,线程2打印“hello”,然后线程1继续打印...
- MATLAB随机信号统计特征
- 再高深的 Python 面试难题,这门课都给你整得明明白白!
- 实验-网页动画(js版)
- 【自定义控件】自定义属性
- solr 启动、停止
- 3D模型格式解析(OBJ)
- php 发送多个,向多个地址发送邮件的php类
- 基于python的图书管理系统设计与实现论文_图书馆管理系统的设计与实现毕业论文...
- oracle可以只装客户端吗,我想在linux下只装oracle客户端行吗?怎么装?
- python3:从 logging 库中摘‘零件’另造小轮子 简单日志功能
- java里面default是什么意思_default_default是什么意思???
- ue4加载本地图片_UE4 读取本地图片
- 前端必会的anime动画库
- 5月17号软件资讯更新合集....
- Facebook pop
- vulnhub——Bulldog2
- 三星笔记本bios设置里找不到U盘启动盘的解决方法