将此操作从matlab转换为python

时间:2016-05-21 10:47:45

标签: python matlab

我在一些matlab脚本中有这一行,我试图转换为python。所以,m = 20,n = 20。 I_true的维度等于[400,1]。

我想转换以下Matlab代码:

A=zeros((2*m*n),(2*m*n)+2);
A(1:m*n,(2*m*n)+1)=-I_true(:);

我转换它了吗?

Python中的转换代码:

for i in range(0,m*n):
    for j in range((2*m*n)+1):
        A[i][j] = I_true[i]

2 个答案:

答案 0 :(得分:1)

让我们看一个小例子,n = 2,m = 2: 在Octave(可能是Matlab):

octave:50> m = 2; n = 2;
octave:51> I_true = [1;2;3;4];
octave:52> A = zeros((2*m*n),(2*m*n)+2);
octave:53> A(1:m*n,(2*m*n)+1)=-I_true(:)
A =

   0   0   0   0   0   0   0   0  -1   0
   0   0   0   0   0   0   0   0  -2   0
   0   0   0   0   0   0   0   0  -3   0
   0   0   0   0   0   0   0   0  -4   0
   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0

Python中的等价物(n = 20,m = 20)将是

import numpy as np
n, m = 20, 20
I_true = np.arange(1, n*m+1)  # just as an example
A = np.zeros((2*m*n, 2*(n*m+1)), dtype=I.dtype)
A[:m*n, 2*m*n] = -I_true

最后一行使用A[:m*n, 2*m*n]而非A[1:m*n, (2*m*n)+1]的原因是 因为Python使用基于0的索引,而Matlab使用基于1的索引。

答案 1 :(得分:0)

同时检查this问题。

你可以在python中定义一个2 * m * n行和2 * m * n + 2列的矩阵,如下所示:

m = 20
n = 20
a = [[0 for i in range(2*m*n)] for j in range((2*m*n)+2)]

现在你有了矩阵,你可以用不同的方法为它的元素赋值。一个例子是使用for循环来分配来自具有相同大小的另一个矩阵的值:

for i in range(2*m*n):
    for j in range((2*m*n)+2):
        a[i][j] = I_true[i][j]

我希望它有所帮助。