numpy IndexError: too many indices for array when indexing matrix with another

14,528

Since labels is a matrix when you do labels==1 you obtain a boolean matrix of the same shape. Then doing a[labels==1, :] will return you only the first column with the lines corresponding to the match. Note that your intention to get:

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

was not achieved (you got only the first column), even though it worked for NumPy < 1.8 (as pointed out by @seberg).

In order to get what you want you can use a flattened view of labels:

a[labels.view(np.ndarray).ravel()==1, :]
Share:
14,528
lilroo
Author by

lilroo

Updated on July 18, 2022

Comments

  • lilroo
    lilroo almost 2 years

    I have a matrix a which I create like this:

    >>> a = np.matrix("1 2 3; 4 5 6; 7 8 9; 10 11 12")
    

    I have a matrix labels which I create like this:

    >>> labels = np.matrix("1;0;1;1")
    

    This is what the two matricies look like:

    >>> a
    matrix([[ 1,  2,  3],
            [ 4,  5,  6],
            [ 7,  8,  9],
            [10, 11, 12]])
    >>> labels
    matrix([[1],
            [0],
            [1],
            [1]])
    

    As you can see, when I select all columns, there is no problem

    >>> a[labels == 1, :]
    matrix([[ 1,  7, 10]])
    

    But when I try to specify a column I get an error

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

    Does anybody know why this is? I am aware there are similar questions to this already but none of them explain my problem well enough, neither are the answers helpful to me.