【发布时间】: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) == 1和1 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