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

2024-04-18 03:40:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我真的不明白怎么回事。有什么想法吗?在


Tags: ornumpy消息元素错误语法any切片
1条回答
网友
1楼 · 发布于 2024-04-18 03:40:32

当它在两个标量之间时,or是明确的,但是正确的向量泛化是什么呢?如果{}和{},那么{{}}应该{}为(1)假,因为并不是所有的成对的条款{}-在一起的是真,(2)真,因为至少有一个成对的{{>}结果为真,(3)^{{},因为这是{{},(4)^{{},因为{{},因为{},因为{}{{{}{{{}{arrays应该是什么呢?在

您可以在这里使用|,并将其视为位问题:

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

显式使用numpys矢量化逻辑or:

^{pr2}$

或者使用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])

相关问题 更多 >