【问题标题】:Issue with porting a 3d matrix from matlab to python将 3d 矩阵从 matlab 移植到 python 的问题
【发布时间】: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)

【问题讨论】:

标签: python matlab matrix


【解决方案1】:

好吧,似乎切换 1st 和 3d 索引解决了这个问题。 正确的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]]]

【讨论】:

    猜你喜欢
    • 2020-02-22
    • 2015-02-04
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多