Python:在Numpy数组分配中使用Equality运算符

时间:2019-04-04 21:45:19

标签: python python-3.x numpy

我在一些在线示例中看到了此代码,并试图理解和修改它:

c = a[b == 1]
  1. 为什么这样做?对于b == 1中满足相等性的每个元素,看来b返回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)]有效。关于我的第一个问题的任何输入信息,说明为什么/为什么?

2 个答案:

答案 0 :(得分:1)

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

c = a[b == 1]

与以下内容没有区别:

c = a[a == 1]

当您不知道实际的数组时。 a的特定内容在这里没有发生; a == 1只是设置了一个布尔掩码,然后您将其重新应用于a中的a[mask_here]。没关系生成掩码是什么。

答案 1 :(得分:0)

您只需将条件放在方括号中。尝试使用此

range(num_features)