gpt4 book ai didi

python - 在 numpy 中广播 (N,) 和 (N,1) 数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:43:21 24 4
gpt4 key购买 nike

我最近在使用 numpy 进行广播时遇到了以下问题。

y = randn(100)
x = randn(100,1)
(y+x).shape
> 100,100

虽然我意识到这是根据 https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html 的规则,这似乎与人们的预期相反——结果是一个 (100,1) 向量。

我只是想知道 - 这种行为是否有充分的理由(即这是可取的行为) - 或者它只是广播规则定义方式的副产品。

最佳答案

基本思想是,当一个或另一个数组需要迭代以使结果形状有意义时,您将迭代地对主轴的每个条目执行操作(另外,NumPy 提供了使迭代发生的方法如果需要,可以使用不同的轴,例如使用 einsum)。

在这种情况下,x 沿其主轴有 100 个不同的东西,每个东西都单独添加到 y。让我们只取第一个值 x[0] 并将其添加到 y。现在我们讨论 y 有 100 个迭代添加到 x[0] 的东西,所以结果是 y 的形状> 事情。对 x[1] 等重复此操作。

如果你做 x.T,那么沿着 x 的长轴只有一件事,即长度为 100 的“行”。因此,它可以按元素添加到 y 而无需修改,因此不再需要广播,您将获得您可能想到的“朴素”矢量数学运算。

NumPy 的广播规则试图在广泛的可能计算和操作中有效地进行编程和迭代,其中许多与线性代数或常见的向量/矩阵操作完全无关。因此,广播并不总是(也不应该总是)假设某些东西以优先考虑线性代数类型的期望。

关于python - 在 numpy 中广播 (N,) 和 (N,1) 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40866598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com