【问题标题】:Python: Using Equality Operator Inside of Numpy Array AssignmentPython:在 Numpy 数组赋值中使用等式运算符
【发布时间】:2019-04-05 06:09:55
【问题描述】:

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

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

abc 都是包含一些数据的相同长度的 NumPy 数组。 我已经搜索了很多,但我什至不知道该怎么称呼这种东西。

  1. 如果我要添加第二个条件,例如:
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


【解决方案1】:

为什么您在第 (1) 点中的示例不起作用?这是Boolean indexing。如果数组是不同的形状,那可能是另一回事,但是:

c = a[b == 1]

无法区分:

c = a[a == 1]

当您不知道实际的数组时。 a 没有特定的内容。 a == 1 只是设置一个布尔掩码,然后您将其重新应用于a[mask_here] 中的a。生成掩码的原因无关紧要。

【讨论】:

  • 第 1 部分确实有效。问题是它为什么起作用以及如何称呼它,而布尔索引的这个答案正是我想要的。你喜欢的帖子正是我一直在努力寻找的那种文档。
  • @MatthewSalvatoreViglione 不客气。我很难理解语法实际上也是在两个独立的部分中起作用的事实:)
【解决方案2】:

您只需将条件分别放在括号中即可。试试这个

c = a[(b == 1) & (d == 1)]

【讨论】:

    猜你喜欢
    • 2019-10-06
    • 2011-07-17
    • 2012-11-02
    • 2012-06-15
    • 2018-12-18
    • 1970-01-01
    • 2016-04-02
    • 2012-03-18
    • 1970-01-01
    相关资源
    最近更新 更多