gpt4 book ai didi

python - Numpy where 可广播条件

转载 作者:行者123 更新时间:2023-12-04 10:20:29 25 4
gpt4 key购买 nike

我用过 numpy.where()现在很多次了,我总是想知道 docs 中的以下声明:

x, y and condition need to be broadcastable to some shape.



我明白为什么这对 都是必要的x y .我们希望将两者组合起来,因此它们应该可以广播为相同的形状。但是,我不明白为什么这对 如此重要。条件 以及。这只是决策规则。假设我有以下三种形状:
condition = (100,)
x = (100, 5)
y = (100, 5)
result = np.where(condition, x, y)

这会导致 ValueError,因为“操作数无法一起广播”。据我了解,这个表达式应该可以正常工作,因为我组合了可广播的 x 和 y 的结果。

你能帮我理解为什么条件与 x 和 y 一起广播如此重要吗?

最佳答案

条件基本上是一个 bool 数组,而不是通用条件。您可以将其视为覆盖 x 最终广播形状的面具。和 y .

如果你这样想,应该很清楚掩码必须与最终输出具有相同的形状,或者可以广播到相同的形状。

为了说明这一点,这里有一个简单的例子。首先,考虑一个场景,其中我们手动定义了一个 3x3 掩码数组作为我们的 condition ,我们传入两个 3 项数组作为 xy ,适合广播:

condition = numpy.array([[0, 1, 1],
[1, 0, 1],
[0, 0, 1]])
ones = numpy.ones(3)
numpy.where(condition, ones[:, None], ones[None, :] + 1)

结果如下所示:
>>> numpy.where(condition, ones[:, None], ones[None, :] + 1)
array([[2., 1., 1.],
[1., 2., 1.],
[2., 2., 1.]])

由于广播步骤, xy表现得好像它们是这样定义的:
>>> x
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
>>> y
array([[2., 2., 2.],
[2., 2., 2.],
[2., 2., 2.]])
>>> numpy.where(condition, ones[:, None], ones[None, :] + 1)
array([[2., 1., 1.],
[1., 2., 1.],
[2., 2., 1.]])

这是 where的基本行为.您可以传入类似 (x > 5) 的条件的事实不会改变上述任何内容; (x > 5)变成一个 bool 数组,它必须与输出具有相同的形状,否则它必须可以广播到该形状。否则, where 的行为将是不明确的。

(顺便说一下,我假设您的问题不是关于为什么形状 (100,)(100, 5)(100, 5) 不可广播;这似乎是一个不同的问题。)

关于python - Numpy where 可广播条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60885963/

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