python - numpy 索引错误 : too many indices for array when indexing matrix with another

标签 python arrays numpy matrix

我有一个这样创建的矩阵:

>>> 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 < 1.8(正如@seberg 所指出的)。

为了得到你想要的,你可以使用labels的扁平化 View :

a[labels.view(np.ndarray).ravel()==1, :]

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

相关文章:

python - 如何在没有第一列的情况下读取 CSV

python - 将链接列表传递给 Django 模板

python - 如何向 numpy 数组添加名称而不更改其维度?

jquery - 光滑的网格将分页中的所有行分组

python - 将所有非零值放在数组的右边

python - 检查 NumPy 数组中是否存在值的最有效方法是什么?

python - 在 Ubuntu 14.10 上安装 anki 的问题

python - 端点导入错误教程

python - 我的服务器(Python套接字)有什么问题?

python - Numpy 选择非零行