【发布时间】:2018-10-12 22:57:25
【问题描述】:
我正在尝试将一些代码从 matlab 脚本移植到 python,并在 3d 矩阵上运行。我正在尝试在 python 上实现它,但我在 python 代码中遇到了一个奇怪的行为。我在这里提出我的问题的简化版本:
(它必须是矩阵而不是数组,因为在原始问题中它必须存储符号表达式)
Matlab 代码,它创建了一系列 ixi 大小的三角数组,其中 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);
最后 2 个矩阵的 Matlab 输出:
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
最后 2 个矩阵的 Python 输出:
[[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)
【问题讨论】:
-
我对其进行了编辑以更接近我的原始问题
-
MATLAB(x,y,z)===python[z][y][x]。在这里阅读更多:docs.scipy.org/doc/numpy-1.15.0/user/… -
谢谢!只需切换索引即可。