将MatLab for循环的数组代码转换为python

qaxu7uf2  于 2023-02-05  发布在  Matlab
关注(0)|答案(1)|浏览(256)

有人给了我Matlab的代码,让我转换成python。但是,我不知道MatLab。下面是代码:
对于i = 1:n风

[input(a:b,:), t(a:b,1)] = EulerMethod(A(:,:,:,i),S(:,:,i),B(:,i),n,scale(:,i),tf,options);

fprintf("%d\n",i);

for j = 1:b
        vwa = generate_wind([input(j,9);input(j,10)],A(:,:,:,i),S(:,:,i),B(:,i),n,scale(:,i));
        wxa(j) = vwa(1);
        wya(j) = vwa(2);
end

% Pick random indexes for filtered inputs
rand_index = randi(tf/0.01-1,1,filter_size);
inputf(c:d,:) = input(a+rand_index,:);
wxf(c:d,1) = wxa(1,a+rand_index);
wyf(c:d,1) = wya(1,a+rand_index);
wzf(c:d,1) = 0;

我搞不清楚[input(a:B,:),t(a:b,1)]是什么意思,wxf,wzf,wyf是MatLab库的一部分还是它自己做的。另外,EulerMethod和generate_wind是独立的类。有人能帮我把这个代码转换成python吗?
到目前为止,我唯一真正做的更改是将for循环从:
对于i = 1:n风

对于范围(1,nWind)内的i:

2sbarzqh

2sbarzqh1#

这里有几样东西要拆。
首先,MATLAB的索引是基于1的,而Python的索引是基于0的,因此,MATLAB中的for i = 1:nWind应该转换为Python中的for i in range(0,nWind)(零是可选的),当nWind = 5时,MATLAB将生成1、2、3、4、5,而Python range将生成0、1、2、3、4。
第二个,一米三,一米四,和wzf是局部变量。MATLAB的独特之处在于你可以在声明变量的同时赋值给特定的索引。这几行是赋值wxawya的前几行(因为它们的第一个索引是1)插入到wxfwyf的第一列(因为它们的第二个索引是1)。如果赋值超出了数组的末尾,MATLAB也会扩展数组。
在没有看到其余代码的情况下,我真的不知道cd在做什么,如果c在循环之前被初始化为1,并且在循环之后有类似c = d+1;的东西,那么你的变量wxfwyf,和wzf在循环的第一次迭代时初始化,并在以后的迭代中扩展。(如果不赞成)模式在MATLAB中。如果是这种情况,在Python中,可以通过在循环之前初始化为空数组并在循环中使用数组的extend()方法来复制它(尽管我敢打赌Python也不赞成这样做)但是,如果你想确定这是真的,我们需要你编辑你的问题,使之包括abcd
第三,EulerMethodgenerate_wind是函数,而不是类。EulerMethod返回两个输出,在Python中可能会通过返回元组来复制这两个输出。
[input(a:b,:), t(a:b,1)] = EulerMethod(...);EulerMethod的两个输出分配到inputt的特定范围内。与第1点和第2点中的概念类似的概念在此也适用。
这些就是你所表达的困惑的答案。如果不坐下来自己做,我在Python方面没有足够的经验来给予更多针对Python的建议。

相关问题