我使用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
答案 0 :(得分:2)
这看起来像索引加重塑操作;要记住的一件事是numpy是零索引的,而matlab是一个索引的。这意味着您需要使用A
对B - 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应该计算适当的维度以保留数组的大小。