4

我想对二维 numpy 数组执行切片:

type1_c = type1_c[
    (type1_c[:,10]==2) or
    (type1_c[:,10]==3) or
    (type1_c[:,10]==4) or
    (type1_c[:,10]==5) or
    (type1_c[:,10]==6)
]

语法看起来不错;但是我收到以下错误消息:'具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()'

我真的不明白出了什么问题。任何想法?

4

1 回答 1

7

or当它在两个标量之间时是明确的,但是正确的向量泛化是什么?ifx == array([0, 0])y == array([0,1]), 应该x or y是 (1) 假,因为并非所有成对项or一起为真,(2) 真,因为至少有一个成对or结果为真, (3) array([0, 1]),因为那是 a 的成对结果or,(4) array([0, 0]), 因为[0,0] or [0,1]会返回,[0,0]因为非空列表是真实的,那么arrays 应该是吗?

您可以|在此处使用,并将其视为按位问题:

>>> import numpy as np
>>> vec = np.arange(10)
>>> vec[(vec == 2) | (vec == 7)]
array([2, 7])

显式使用numpys 向量化逻辑或:

>>> np.logical_or(vec==3, vec==5)
array([False, False, False,  True, False,  True, False, False, False, False], dtype=bool)
>>> vec[np.logical_or(vec==3, vec==5)]
array([3, 5])

或 use in1d,这在这里效率更高:

>>> np.in1d(vec, [2, 7])
array([False, False,  True, False, False, False, False,  True, False, False], dtype=bool)
>>> vec[np.in1d(vec, [2, 7])]
array([2, 7])
于 2012-09-02T14:08:52.380 回答