我想用np.argwhere或np.where来选择1、2、3、12和13的索引。在两种情况下,以下代码都无法正常工作。有什么方法可以使用这两个命令来执行此操作,还是应该使用它两次而不是使用&运算符?
`a= np.array([1,2,3,4,10,12,13])
b = np.argwhere((a<4) & (a>10))
c = np.where((a<4) & (a>10))
print(b)
print(c)`
答案 0 :(得分:1)
In [31]: a= np.array([1,2,3,4,10,12,13])
In [32]: a
Out[32]: array([ 1, 2, 3, 4, 10, 12, 13])
分别满足以下两个条件:
In [33]: a<4
Out[33]: array([ True, True, True, False, False, False, False])
In [34]: a>10
Out[34]: array([False, False, False, False, False, True, True])
使用逻辑或加入他们
In [35]: (a<4) | (a>10)
Out[35]: array([ True, True, True, False, False, True, True])
where
是一个元组(尺寸为1,因为尺寸为1):
In [36]: np.where((a<4) | (a>10))
Out[36]: (array([0, 1, 2, 5, 6]),)
该元组可直接用于索引a
:
In [37]: a[_]
Out[37]: array([ 1, 2, 3, 12, 13])
argwhere
给出相同的索引,但采用“垂直”格式:
In [38]: np.argwhere((a<4) | (a>10))
Out[38]:
array([[0],
[1],
[2],
[5],
[6]])
它可能更容易可视化,但对于索引编制却不是那么有用(除非您反复进行)。
使用逻辑和,结果为空索引-没有值同时满足两个条件:
In [39]: np.where((a<4) & (a>10))
Out[39]: (array([], dtype=int64),)
答案 1 :(得分:0)
您可以使用np.where
:
c = np.where((a < 4) & (a > 10),a, a)
c
array([ 1, 2, 3, 4, 10, 12, 13])