numpy中的广播机制

发布时间:2024年01月13日

????????

目录

广播的规则

例子

一个简单例子:

更加复杂的例子

广播可能引发的错误


????????广播是 NumPy 在算术运算中处理不同形状数组的方式。它按照特定的规则自动扩展数组的维度,让它们具有兼容的形状,以便可以执行逐元素的操作。

广播的规则

NumPy 的广播遵循以下规则:

  1. 规则一:?如果两个数组在维度上不匹配,那么数组的形状会沿着长度为1的维度进行扩展以匹配另一个数组的形状。
  2. 规则二:?如果两个数组在任何维度上的大小不一致,并且其中一个数组在该维度上的大小为1,则这个数组看起来会被复制扩展到与另一个数组相同的大小。
  3. 规则三:?如果在所有维度上大小都不匹配,并且没有任何一个维度等于1,则会引发错误。

例子

一个简单例子:
import numpy as np

A = np.array([[1, 2, 3], [4, 5, 6]])  # 形状 (2, 3)
B = np.array([10, 20, 30])            # 形状 (3,)

# 这里 B 将按照广播规则自动扩展为:
# [[10, 20, 30],
#  [10, 20, 30]]
# 现在 A 和 B 具有相同的形状,可以执行逐元素加法
C = A + B

print(C)

输出将是:

[[11 22 33]
 [14 25 36]]
更加复杂的例子

?考虑以下具有更高维度的数组和一个形状不匹配的向量:

A = np.random.rand(4, 3, 2)  # 随机生成一个形状为 (4, 3, 2) 的数组
B = np.array([1, 2])         # 形状为 (2,)

# 此时 B 将沿着第二个维度 (size 1) 进行扩展以匹配 A 的形状
# 变为形状 (1, 1, 2),然后在其他维度进行复制以匹配 A:
# [[[1, 2]],
#  [[1, 2]],
#  [[1, 2]],
#  [[1, 2]]]
# 现在 A 和 B 可以进行逐元素运算
C = A + B

????????在这个例子中,B 仅在最后一个维度上与 A 的形状不匹配。根据广播规则,B 首先被扩展为 (1, 1, 2),然后在前两个维度上复制以匹配 A 的形状 (4, 3, 2)

广播可能引发的错误

当广播规则不能应用于两个数组时,将引发错误:

A = np.ones((3, 2))
B = np.ones((2, 3))

# 尝试相加将引发错误,因为 A 和 B 在任何维度上都不匹配
# 并且没有任何一个维度等于1
C = A + B  # ValueError: operands could not be broadcast together

????????在这个例子中,AB 都没有任何一个维度大小为1,它们也不匹配,因此无法进行广播。

文章来源:https://blog.csdn.net/sinat_34461199/article/details/135480410
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。