对numpy数组操作感到困惑

时间:2020-02-09 07:07:13

标签: python-3.x numpy

怎么会这样呢?

X=np.array([range(1,12)])     

A=X>4
B=X<10
C=(X>4) | (X<10)
print (X[A])
print (X[B])
print (X[C])



[ 5  6  7  8  9 10 11]
[1 2 3 4 5 6 7 8 9]
[ 1  2  3  4  5  6  7  8  9 10 11]

1 个答案:

答案 0 :(得分:3)

我猜您担心的是因为最终表达式中包含了每个元素,仅仅是因为前两个很明显(5..11都大于4而1..9都小于比十)。

但是第三个也是 ,因为 every 元素大于四个 。数字1..9都小于十,因此它们在其中。同样,5..11都大于四,因此它们也在其中。这两个范围的并集是整个值集。

如果您想要的项目介于四个 (两端除外)之间,则您应该使用“ and”而不是“ or”({ {1}}代替&):

|

输出为:

import numpy as np
X=np.array([range(1,12)])     

A=X>4
B=X<10
C=(X>4) | (X<10)
D=(X>4) & (X<10)
E=(X<=4) | (X>=10)
print (X[A])
print (X[B])
print (X[C])
print (X[D])
print (X[E])

因为您没有在原始问题中指定想要的 ,所以我还添加了相反的操作(以获取该范围内的 not 值)。 [ 5 6 7 8 9 10 11] [1 2 3 4 5 6 7 8 9] [ 1 2 3 4 5 6 7 8 9 10 11] [5 6 7 8 9] [ 1 2 3 4 10 11] 代码表明了这一点。