NumPy 广播

2024年11月10日 NumPy 广播 极客笔记

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]]

本文链接:http://so.lmcjl.com/news/17491/

展开阅读全文