切片numpy数组时使用python的逻辑运算符

时间:2012-09-02 13:48:15

标签: python arrays slice

我想在二维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()'

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

1 个答案:

答案 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