numpy中的广播机制

        

目录

广播的规则

例子

一个简单例子:

更加复杂的例子

广播可能引发的错误


        广播是 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,它们也不匹配,因此无法进行广播。

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值