Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy索引器错误:当使用另一个索引矩阵时,数组的索引太多_Python_Arrays_Numpy_Matrix - Fatal编程技术网

Python numpy索引器错误:当使用另一个索引矩阵时,数组的索引太多

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,如下所示:

>>> 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