我想在二维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()'
我真的不明白出了什么问题。有什么想法吗?
答案 0 :(得分:7)
or
在两个标量之间是明确的,但正确的向量推广是什么?如果x == array([0, 0])
和y == array([0,1])
,则x or y
应为(1)为假,因为并非所有成对词or
- 一起为真,(2)为真,因为至少有一个成对or
结果为真,(3)array([0, 1])
,因为这是or
,(4)array([0, 0])
的成对结果,因为[0,0] or [0,1]
将返回{ {1}}因为非空列表是真实的,所以[0,0]
应该是吗?
您可以在此处使用array
,并将其视为一个按位问题:
|
明确使用>>> import numpy as np
>>> vec = np.arange(10)
>>> vec[(vec == 2) | (vec == 7)]
array([2, 7])
矢量化逻辑或:
numpy
或使用>>> 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])
,这在这里效率更高:
in1d