我有一个矩阵a,我这样创建:

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

有人知道这是为什么吗?
我知道已经有与此类似的问题,但是没有一个问题可以很好地解释我的问题,答案也无济于事。

最佳答案

由于labels是矩阵,当您执行labels==1时,您将获得相同形状的 bool 矩阵。然后执行a[labels==1, :]将只向返回您的第一列,其中第一行的行与该匹配项相对应。请注意,您打算获得:

matrix([[ 1,  2,  3],
        [ 7,  8,  9],
        [10, 11, 12]])

即使它适用于NumPy
为了得到想要的东西,可以使用扁平化的labels View :
a[labels.view(np.ndarray).ravel()==1, :]

关于python - numpy IndexError : too many indices for array when indexing matrix with another,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20165565/

10-10 00:53
查看更多