个性化阅读
专注于IT技术分析

NumPy为什么要使用广播?如何使用。。。

在数学运算中, 我们可能需要考虑不同形状的阵列。 NumPy可以在涉及不同形状的数组的情况下执行此类操作。

例如, 如果我们考虑矩阵相乘运算, 则如果两个矩阵的形状相同, 则将易于执行此运算。但是, 如果形状不相似, 我们可能还需要进行操作。

考虑下面的示例将两个数组相乘。

例子

import numpy as np
a = np.array([1, 2, 3, 4, 5, 6, 7])
b = np.array([2, 4, 6, 8, 10, 12, 14])
c = a*b;
print(c)

输出

[ 2  8 18 32 50 72 98]

但是, 在上面的示例中, 如果我们考虑不同形状的数组, 则会得到如下所示的错误。

例子

import numpy as np
a = np.array([1, 2, 3, 4, 5, 6, 7])
b = np.array([2, 4, 6, 8, 10, 12, 14, 19])
c = a*b;
print(c)

输出

ValueError: operands could not be broadcast together with shapes (7, ) (8, )

在上面的示例中, 我们可以看到两个数组的形状不相似, 因此无法将它们相乘。 NumPy可以通过使用广播的概念执行此类操作。

在广播中, 将较小的阵列广播到较大的阵列, 以使其形状相互兼容。

广播规则

如果满足以下情况, 则可以进行广播。

  1. 较小尺寸的数组可以在形状后附加” 1″。
  2. 每个输出尺寸的大小是该尺寸中输入尺寸的最大值。
  3. 如果输入在特定维度上的大小与输出大小匹配或其值正好为1, 则可以在计算中使用该输入。
  4. 如果输入大小为1, 则第一个数据条目将用于沿维度进行计算。

如果满足以下规则, 则可以将广播应用于阵列。

  1. 所有输入数组都具有相同的形状。
  2. 数组具有相同的维数, 每个维的长度可以是公共长度或1。
  3. 尺寸较小的数组可以在形状后附加” 1″。

让我们看一个广播的例子。

例子

import numpy as np
a = np.array([[1, 2, 3, 4], [2, 4, 5, 6], [10, 20, 39, 3]])
b = np.array([2, 4, 6, 8])
print("\nprinting array a..")
print(a)
print("\nprinting array b..")
print(b)
print("\nAdding arrays a and b ..")
c = a + b;
print(c)

输出

printing array a..
[[ 1  2  3  4]
 [ 2  4  5  6]
 [10 20 39  3]]

printing array b..
[2 4 6 8]

Adding arrays a and b ..
[[ 3  6  9 12]
 [ 4  8 11 14]
 [12 24 45 11]]
NumPy为什么要使用广播?如何使用。。。

赞(0)
未经允许不得转载:srcmini » NumPy为什么要使用广播?如何使用。。。

评论 抢沙发

评论前必须登录!