Python:在 Numpy 数组赋值中使用相等运算符

我在网上的一些例子中看到了这段代码,正在尝试理解和修改它:

c = a[b == 1]
  1. 为什么这样做?b == 1对于b满足等式的每个元素,它似乎返回 true 。我不明白这样的事情如何a[True]最终评估为“对于 a 中相同索引值b等于 1 的所有值,将它们复制到c

ab, 和c都是包含一些数据的相同长度的 NumPy 数组。我已经搜索了很多,但甚至不知道如何称呼这种东西。

  1. 如果我想添加第二个条件,例如:

c = a[b == 1 and d == 1]

我得到

ValueError:包含多个元素的数组的真值不明确。使用 a.any() 或 a.all()

我知道发生这种情况是因为由于此处解释的原因,相等运算的组合不明确,但我不确定如何仅在一行中添加a.any()或添加a.all()到该表达式中。

编辑

对于问题 2,c = a[(b == 1) & (d == 1)]有效。关于我的第一个问题关于如何/为什么工作的任何意见?


皈依舞
浏览 363回答 2
2回答

FFIVE

为什么您在第 (1) 点中的示例不起作用?这是布尔索引。如果数组的形状不同,则可能是另一回事,但是:c = a[b == 1]无法区分:c = a[a == 1]当您不知道实际数组时。这里没有任何具体a的事情发生;a == 1只是设置一个布尔掩码,然后您将其重新应用于ain a[mask_here]。生成掩码的原因无关紧要。

慕勒3428872

您只需要将条件分别放在括号中。尝试使用这个c = a[(b == 1) & (d == 1)]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python