将重塑从Matlab转换为Python

时间:2015-10-22 12:33:05

标签: python matlab numpy multidimensional-array

我使用numpy而且我不知道如何将这个MATLAB代码翻译成python:

C = reshape(A(B.',:).', 6, []).';

我认为我唯一正确的做法是:

temp=A[B.transpose(),:]

但我不知道如何翻译所有行。

矩阵的例子:

A =

 1     2
 1     3
 1     4
 1     5
 1     6
 2     3
 2     4
 2     5
 2     6

B =

 1     2     3
 1     2     4
 1     2     5
 1     2     6
 1     2     7
 1     2     8
 1     2     9

C =

 1     2     1     3     1     4
 1     2     1     3     1     5
 1     2     1     3     1     6
 1     2     1     3     2     3
 1     2     1     3     2     4
 1     2     1     3     2     5
 1     2     1     3     2     6

1 个答案:

答案 0 :(得分:2)

这看起来像索引加重塑操作;要记住的一件事是numpy是零索引的,而matlab是一个索引的。这意味着您需要使用AB - 1进行索引,然后根据需要对结果进行重新整形。例如:

import numpy as np

A = np.array([[1, 2],
              [1, 3],
              [1, 4],
              [1, 5],
              [1, 6],
              [2, 3],
              [2, 4],
              [2, 5],
              [2, 6]])

B = np.array([[1, 2, 3],
              [1, 2, 4],
              [1, 2, 5],
              [1, 2, 6],
              [1, 2, 7],
              [1, 2, 8],
              [1, 2, 9]])

C = A[B - 1].reshape(B.shape[0], -1)

结果是:

>>> C
array([[1, 2, 1, 3, 1, 4],
       [1, 2, 1, 3, 1, 5],
       [1, 2, 1, 3, 1, 6],
       [1, 2, 1, 3, 2, 3],
       [1, 2, 1, 3, 2, 4],
       [1, 2, 1, 3, 2, 5],
       [1, 2, 1, 3, 2, 6]])

一个可能令人困惑的部分:-1方法中的reshape是一个标记,表示numpy应该计算适当的维度以保留数组的大小。