Numpy 和 MATLAB 中的索引
Indices in Numpy and MATLAB
我在 Matlab 中有一段代码要转换成 Python/numpy。
我有一个矩阵 ind
,其维度为 (32768, 24)。我有另一个矩阵 X
,其维度为 (98304, 6)。当我执行操作时
result = X(ind)
矩阵的形状是(32768, 24).
但在 numpy 中,当我执行相同的形状时
result = X[ind]
我得到 result
矩阵的形状为 (32768, 24, 6)。
如果有人能帮助我解决为什么会出现这两个不同的结果以及如何解决这些问题,我将不胜感激。我也想获得 numpy 中 result
矩阵的形状 (32768, 24)
在Octave中,如果我定义:
>> X=diag([1,2,3,4])
X =
Diagonal Matrix
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
>> idx = [6 7;10 11]
idx =
6 7
10 11
然后索引选择一个块:
>> X(idx)
ans =
2 0
0 3
numpy
等价于
In [312]: X=np.diag([1,2,3,4])
In [313]: X
Out[313]:
array([[1, 0, 0, 0],
[0, 2, 0, 0],
[0, 0, 3, 0],
[0, 0, 0, 4]])
In [314]: idx = np.array([[5,6],[9,10]]) # shifted for 0 base indexing
In [315]: np.unravel_index(idx,(4,4)) # raveled to unraveled conversion
Out[315]:
(array([[1, 1],
[2, 2]]),
array([[1, 2],
[1, 2]]))
In [316]: X[_] # this indexes with a tuple of arrays
Out[316]:
array([[2, 0],
[0, 3]])
另一种方式:
In [318]: X.flat[idx]
Out[318]:
array([[2, 0],
[0, 3]])
我在 Matlab 中有一段代码要转换成 Python/numpy。
我有一个矩阵 ind
,其维度为 (32768, 24)。我有另一个矩阵 X
,其维度为 (98304, 6)。当我执行操作时
result = X(ind)
矩阵的形状是(32768, 24).
但在 numpy 中,当我执行相同的形状时
result = X[ind]
我得到 result
矩阵的形状为 (32768, 24, 6)。
如果有人能帮助我解决为什么会出现这两个不同的结果以及如何解决这些问题,我将不胜感激。我也想获得 numpy 中 result
矩阵的形状 (32768, 24)
在Octave中,如果我定义:
>> X=diag([1,2,3,4])
X =
Diagonal Matrix
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
>> idx = [6 7;10 11]
idx =
6 7
10 11
然后索引选择一个块:
>> X(idx)
ans =
2 0
0 3
numpy
等价于
In [312]: X=np.diag([1,2,3,4])
In [313]: X
Out[313]:
array([[1, 0, 0, 0],
[0, 2, 0, 0],
[0, 0, 3, 0],
[0, 0, 0, 4]])
In [314]: idx = np.array([[5,6],[9,10]]) # shifted for 0 base indexing
In [315]: np.unravel_index(idx,(4,4)) # raveled to unraveled conversion
Out[315]:
(array([[1, 1],
[2, 2]]),
array([[1, 2],
[1, 2]]))
In [316]: X[_] # this indexes with a tuple of arrays
Out[316]:
array([[2, 0],
[0, 3]])
另一种方式:
In [318]: X.flat[idx]
Out[318]:
array([[2, 0],
[0, 3]])