微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Numpy 和 MATLAB 中的索引

如何解决Numpy 和 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,4])
In [313]: X
Out[313]: 
array([[1,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,3]])

另一种方式:

In [318]: X.flat[idx]
Out[318]: 
array([[2,3]])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。