Проблема с переносом 3d матрицы с matlab на python - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь перенести некоторый код из сценария matlab в python, и я работаю на 3D-матрице.Я пытаюсь реализовать это на Python, но я столкнулся со странным поведением в моем коде Python.Я представляю здесь упрощенную версию моей проблемы:

(это должна быть матрица, а не массив, поскольку в исходной задаче она должна хранить символические выражения)

код Matlab,он создает серию треугольных массивов размером i x i , где i = 1: n:

n = 3;
f = zeros(n+1,n+1,n+1);
for m = 1:n
    for i = 1:m+1
        for j = 1:m+1 -i +1
            f(i,j,m+1) = i*j*m;
        end
    end
end

Мой код Python:

n = 3;
f = [[[0 for k in range(n+1)] for j in range(n+1)] for i in range(n+1)]
for m in range(n):
    for i in range(m+2):
        for j in range(m+2-i):
            f[i][j][m+1] = (i+1)*(j+1)*(m+1);

Выход Matlab для последних 2 матриц:

f(:,:,3) =                  f(:,:,4) =

 2     4     6     0         3     6     9    12
 4     8     0     0         6    12    18     0
 6     0     0     0         9    18     0     0
 0     0     0     0         12     0     0     0

Выход Python для последних 2 матриц:

[[0, 0, 6, 9], [0, 0, 0, 18], [0, 0, 0, 0], [0, 0, 0, 0]],
[[0, 0, 0, 12], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]]

Я проверил, что числоитераций одинаковы в обоих кодах.я также проверил, что индексы имеют правильные значения в каждой итерации.Например: Matlab m, i, j = (1,1,1) равно Python m, i, j = (0,0,0)

1 Ответ

0 голосов
/ 12 октября 2018

Что ж, похоже, что 1-й и 3-й индексы решили проблему.Правильный код Python:

n = 3;
f = [[[0 for k in range(n+1)] for j in range(n+1)] for i in range(n+1)]
for m in range(n):
    for i in range(m+2):
        for j in range(m+2-i):
            f[m+1][i][j] = (i+1)*(j+1)*(m+1);

, и вывод подтверждает это:

 [[2, 4, 6, 0], [4, 8, 0, 0], [6, 0, 0, 0], [0, 0, 0, 0]],
 [[3, 6, 9, 12], [6, 12, 18, 0], [9, 18, 0, 0], [12, 0, 0, 0]]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...