我试图使用numpy.where()将二维数组索引为某些值,但是除非我在没有:
切片的第一个索引中进行索引,否则它总是会增加维度。我似乎在文档中找不到对此的解释。
例如,假设我有一个数组a
:
a = np.arange(20)
a = np.reshape(a,(4,5))
print("a = ",a)
print("a shape = ", a.shape)
输出:
a = [[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
a shape = (4, 5)
如果我有两个索引数组,一个在'x'方向,一个在'y'方向:
x = np.arange(5)
y = np.arange(4)
xindx = np.where((x>=2)&(x<=4))
yindx = np.where((y>=1)&(y<=2))
,然后使用'y'索引为a
进行索引,因此没有问题:
print(a[yindx])
print(a[yindx].shape)
输出:
[[ 5 6 7 8 9]
[10 11 12 13 14]]
(2, 5)
但是,如果我在其中一个索引中有:
,那么我的尺寸为1:
print(a[yindx,:])
print(a[yindx,:].shape)
print(a[:,xindx])
print(a[:,xindx].shape)
输出:
[[[ 5 6 7 8 9]
[10 11 12 13 14]]]
(1, 2, 5)
[[[ 2 3 4]]
[[ 7 8 9]]
[[12 13 14]]
[[17 18 19]]]
(4, 1, 3)
我也遇到了一维数组的问题。我该如何解决?
答案 0 :(得分:0)
如果xindx
和yindx
是numpy数组,则结果将符合预期。但是,它们是具有单个值的元组。
最简单(也很愚蠢)的解决方法:
xindx = np.where((x>=2)&(x<=4))[0]
yindx = np.where((y>=1)&(y<=2))[0]
仅给出条件,np.where
将返回元组中匹配元素的索引。 documentation中明确禁止这种用法。
更现实的是,您可能需要类似的东西:
xindx = np.arange(2, 5)
yindx = np.arange(1, 3)
...但实际上取决于我们看不到的上下文