R.j*_*joe 1 python numpy numpy-ndarray
我想使用 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)`
Run Code Online (Sandbox Code Playgroud)
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])
Run Code Online (Sandbox Code Playgroud)
分别有2个条件:
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])
Run Code Online (Sandbox Code Playgroud)
用逻辑或将它们连接起来:
In [35]: (a<4) | (a>10)
Out[35]: array([ True, True, True, False, False, True, True])
Run Code Online (Sandbox Code Playgroud)
where是一个元组(大小为 1,因为有 1 个维度):
In [36]: np.where((a<4) | (a>10))
Out[36]: (array([0, 1, 2, 5, 6]),)
Run Code Online (Sandbox Code Playgroud)
该元组可以直接用于索引a:
In [37]: a[_]
Out[37]: array([ 1, 2, 3, 12, 13])
Run Code Online (Sandbox Code Playgroud)
argwhere给出相同的索引,但采用“垂直”格式:
In [38]: np.argwhere((a<4) | (a>10))
Out[38]:
array([[0],
[1],
[2],
[5],
[6]])
Run Code Online (Sandbox Code Playgroud)
它可能更容易可视化,但对于索引来说不太有用(除非您迭代地执行)。
使用逻辑与,结果是空索引 - 没有值满足这两个条件:
In [39]: np.where((a<4) & (a>10))
Out[39]: (array([], dtype=int64),)
Run Code Online (Sandbox Code Playgroud)