【问题标题】:Use of logical_and with list of lists将logical_and 与列表一起使用
【发布时间】:2019-11-26 02:15:18
【问题描述】:

假设我有以下两个列表:

l = [[], [1]]
m = [0, 1]

如果我检查元素是否在列表中:

>>> np.array(m[1]) == 1
True
>>> 1 in np.array(l)[1]
True

这按预期工作。

但是,如果我使用 numpy logical_and 运算符,则会失败:

>>> np.logical_and(np.array(m) == 1, 1 in np.array(l))
array([False, False])

为什么数组中的两个位置都被评估为False

目标是逐元素评估这些表单的列表。而且,根据文档,np.logical_and 用于“按元素计算 x1 AND x2 的真值”。

由于 l 是一个列表列表,我使用 in 运算符来测试元素比较。

因此,我期望>>> np.logical_and(np.array(m) == 1, 1 in np.array(l))的输出

成为

array([False, True])

毕竟[1]只是np.array(l)中的一个元素:

>>> for i in np.array(l):
...     print(i)
...
[]
[1]

【问题讨论】:

  • 你放弃了[1]s。这是故意的吗?
  • 1 in np.array(l) Out[30]: False
  • 如果是故意的,那么在将np.logical_and 引入图片之前,您应该查看np.array(m) == 11 in np.array(l) 的各个输出。如果这是一个意外,那么这个问题应该因为一个错字而被关闭。
  • 不起作用:>>> (np.logical_and(np.array(m) == 1, [1] in np.array(l))) array([False, False]) ...另外,虽然[1]是那个元素(我完全同意!!),测试是1是否在列表[1]中,哪个这是。如果列表在列表中,则不是。
  • 我明白你的意思。也许您可以展平该列表。 import itertools 然后 1 in np.array(list(itertools.chain.from_iterable(l))) 返回 True

标签: python numpy boolean


【解决方案1】:

所以只分析你的代码

np.array(m) == 1 
>>> [False  True]
1 in np.array(l)
>>> False

你基本上是在比较 False[False True]

更新

如果您希望输出为 [False True],那么您应该改用logical_or。

【讨论】:

  • @bhaskarc 已经回答了我的问题。我正在使用logical_or 来评估其他条件,并且遇到了类似的古怪错误。结果我没有意识到这些元素的类型是:dtype=object
猜你喜欢
  • 2017-09-07
  • 2013-10-13
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 2017-12-25
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
相关资源
最近更新 更多