3

这适用于 MATLAB:

>> p = [1, 0, 2, 4, 3, 6, 5];
>> p(p+1)

ans = 

     0   1   2   3   4   5   6

有没有办法在 NumPy 中做同样的事情?我不知道如何:

>>> p = mat([1, 0, 2, 4, 3, 6, 5])
>>> p[p]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\numpy\matrixlib\defmatrix.py", line 305, in __getitem__
    out = N.ndarray.__getitem__(self, index)
IndexError: index (1) out of range (0<=index<0) in dimension 0
>>> p[:,p]

此时解释器似乎进入了无限循环。这也会导致无限循环:

>>> [p[:,i] for i in p]

但这有效:

>>> [p[:,i] for in range(0,6)]

因此,使用矩阵成员作为它自己的索引会导致问题。这是 Python 中的错误吗?还是我做错了什么?

4

1 回答 1

5

只有整数可以用作数组或矩阵索引。像这样初始化的矩阵的默认类型是浮点数。

您可以使用 a numpy.arraynot a numpy.matrix

In [2]: import numpy as np
In [3]: x = np.array([1, 0, 2, 4, 3, 6, 5])
In [4]: x[x]
Out[4]: array([0, 1, 2, 3, 4, 5, 6])

或者您可以将矩阵显式更改为整数类型:

In [5]: x = np.matrix(x).astype(int)
In [6]: x[0, x]
Out[7]: matrix([[0, 1, 2, 3, 4, 5, 6]])

Anumpy.matrix是专为 2D 矩阵设计的专用类。特别是,您不能使用单个整数索引 2D 矩阵,因为 - 好吧 - 它是二维的,您需要指定两个整数,因此在第二个示例中需要额外的 0 索引。

于 2013-01-28T11:29:23.980 回答