【发布时间】:2019-04-05 06:09:55
【问题描述】:
我在网上的一些例子中看到了这段代码,并试图理解和修改它:
c = a[b == 1]
- 为什么会这样?对于满足相等性的
b的每个元素,b == 1似乎返回 true。我不明白a[True]之类的结果如何最终评估为“对于b中相同索引值等于1 的所有值,将它们复制到c”
a、b 和 c 都是包含一些数据的相同长度的 NumPy 数组。
我已经搜索了很多,但我什至不知道该怎么称呼这种东西。
- 如果我要添加第二个条件,例如:
c = a[b == 1 and d == 1]
我明白了
ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
我知道发生这种情况是因为相等操作的组合不明确,原因已解释为 here,但我不确定如何在一行中将 a.any() 或 a.all() 添加到该表达式中。
编辑:
对于问题 2,c = a[(b == 1) & (d == 1)] 有效。关于我的第一个关于如何/为什么起作用的问题的任何意见?
【问题讨论】:
-
试试
c = a[(b == 1) & (d == 1)] -
这很好地回答了我的第二个问题并按预期工作。您对第 1 部分有什么意见吗?
-
您的第 1 部分过于宽泛。而不是为什么这样做会很好,而是提出一个更具体的问题。这样我帮你更容易:)
-
@Yuca,更新了更多信息。
-
了解正在发生的事情的最佳方法是查看 b == 1。如果没有示例数据,我无法提供具体示例,但如果 b 是大小为 10 的数组,
b == 1将返回 10 个布尔值。这个新的布尔数组用作数组 a 的有效索引
标签: python python-3.x numpy