Python numpy索引器错误:当使用另一个索引矩阵时,数组的索引太多
我创建了一个矩阵a,如下所示:Python numpy索引器错误:当使用另一个索引矩阵时,数组的索引太多,python,arrays,numpy,matrix,Python,Arrays,Numpy,Matrix,我创建了一个矩阵a,如下所示: >>> a = np.matrix("1 2 3; 4 5 6; 7 8 9; 10 11 12") >>> labels = np.matrix("1;0;1;1") 我创建了一个矩阵标签,如下所示: >>> a = np.matrix("1 2 3; 4 5 6; 7 8 9; 10 11 12") >>> labels = np.matrix("1;0;1;1") 这是两个婚姻的
>>> a = np.matrix("1 2 3; 4 5 6; 7 8 9; 10 11 12")
>>> labels = np.matrix("1;0;1;1")
我创建了一个矩阵标签,如下所示:
>>> a = np.matrix("1 2 3; 4 5 6; 7 8 9; 10 11 12")
>>> labels = np.matrix("1;0;1;1")
这是两个婚姻的样子:
>>> a
matrix([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
>>> labels
matrix([[1],
[0],
[1],
[1]])
如您所见,当我选择所有列时,没有问题
>>> a[labels == 1, :]
matrix([[ 1, 7, 10]])
但是当我试图指定一列时,我得到了一个错误
>>> a[labels == 1, 1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/numpy/matrixlib/defmatrix.py", line 305, in __getitem__
out = N.ndarray.__getitem__(self, index)
IndexError: too many indices for array
>>>
>a[labels==1,1]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python2.7/site packages/numpy/matrixlib/defmatrix.py”,第305行,在__
out=N.ndarray.\uuuu getitem\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu(自,索引)
索引器:数组的索引太多
>>>
有人知道这是为什么吗?
我知道已经有类似的问题了,但没有一个能很好地解释我的问题,答案对我也没有帮助。因为
标签
是一个矩阵,当你做标签==1
时,你会得到一个相同形状的布尔矩阵。然后执行a[labels==1,:]
将只返回第一列,其中包含与匹配对应的行。请注意,您希望获得:
matrix([[ 1, 2, 3],
[ 7, 8, 9],
[10, 11, 12]])
虽然它对NumPy<1.8有效(正如@seberg所指出的),但没有实现(您只获得了第一列)
为了得到您想要的,您可以使用标签的展平视图:
a[labels.view(np.ndarray).ravel()==1, :]
标签是二维的,但是索引使用它就像使用一维一样。实际上,第一个索引也是错误的,numpy>=1.8。你也会得到同样的错误。很好,我发现2D数组在大多数np工作中表现得更好。有了matlab背景,很多人默认使用矩阵vs数组。顺便说一句:我在1.7.labels.view(np.ndarray)中得到了相同的行为,将
labels
的类型更改为np.ndarray,而ravel
调用使数组变平。注:可输入==1