NumPy 广播

发布于 2024-06-25 16:49:21 字数 1833 浏览 18 评论 0

术语广播是指 NumPy 在算术运算期间处理不同形状的数组的能力。 对数组的算术运算通常在相应的元素上进行。 如果两个阵列具有完全相同的形状,则这些操作被无缝执行。

示例 1 形状相同

import numpy as np 

a = np.array([1,2,3,4]) 
b = np.array([10,20,30,40]) 
c = a * b 
print c

输出如下:

[10   40   90   160]

如果两个数组的维数不相同,则元素到元素的操作是不可能的。 然而,在 NumPy 中仍然可以对形状不相似的数组进行操作,因为它拥有广播功能。 较小的数组会广播到较大数组的大小,以便使它们的形状可兼容。

1) 让所有输入数姐都向其中维数最多的数绀看齐,shape 属性中不足的部分都通过在前面加 1 补齐。 2) 输出数组的 shape 属性是输入数组的 shape 屈性的各个轴上的最大值。 3) 如果输入数组的某个轴的 L<:度为 1 或与输出数组的对应轴的长度相同,这个数组能够用 来计算,否则出错。 4) 当输入数组的某个轴的长度为 1 吋,沿着此轴运算时都用此轴上的第一组值。

如果满足以下规则,可以进行广播:

  • ndim 较小的数组会在前面追加一个长度为 1 的维度。

     

  • 输出数组的每个维度的大小是输入数组该维度大小的最大值。

     

  • 如果输入在每个维度中的大小与输出大小匹配,或其值正好为 1,则在计算中可它。

     

  • 如果输入的某个维度大小为 1,则该维度中的第一个数据元素将用于该维度的所有计算。

     

如果上述规则产生有效结果,并且满足以下条件之一,那么数组被称为可广播的

  • 数组拥有相同形状。

     

  • 数组拥有相同的维数,每个维度拥有相同长度,或者长度为 1。

     

  • 数组拥有极少的维度,可以在其前面追加长度为 1 的维度,使上述条件成立。

     

下面的例称展示了广播的示例。

示例 2

import numpy as np 
a = np.array([[0.0,0.0,0.0],[10.0,10.0,10.0],[20.0,20.0,20.0],[30.0,30.0,30.0]]) 
b = np.array([1.0,2.0,3.0])  
print('第一个数组:')  
print(a)
print('\n')  
print('第二个数组:') 
print(b)
print('\n')
print('第一个数组加第二个数组:')
print(a + b)

输出如下:

第一个数组:
[[ 0. 0. 0.]
 [ 10. 10. 10.]
 [ 20. 20. 20.]
 [ 30. 30. 30.]]

第二个数组:
[ 1. 2. 3.]

第一个数组加第二个数组:
[[ 1. 2. 3.]
 [ 11. 12. 13.]
 [ 21. 22. 23.]
 [ 31. 32. 33.]]

下面的图片展示了数组 b 如何通过广播来与数组 a 兼容。

array

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

0 文章
0 评论
22 人气
更多

推荐作者

新人笑

文章 0 评论 0

mb_vYjKhcd3

文章 0 评论 0

小高

文章 0 评论 0

来日方长

文章 0 评论 0

哄哄

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文