我想对二维 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()'
我真的不明白出了什么问题。任何想法?
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])