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