0

以下をMatlabからPythonに変換するにはどうすればよいですか?私はまだリスト/行列や配列をnumpyなどで包み込もうとしています。

outframe(:,[4:4:nout-1]) = 0.25*inframe(:,[1:n-1]) + 0.75*inframe(:,[2:n])
pos=(beamnum>0)*(beamnum<=nbeams)*(binnum>0)*(binnum<=nbins)*((beamnum-1)*nbins+binnum)
for index =1:512:
outarray(index,:) =uint8(interp1([1:n],inarray64(index,:),[1:.25:n],method))

(他にもありますが、これらは私が理解する方法がわからない特定のステートメントです。私はnumpyをインポートしました、

4

2 に答える 2

1

numpyの主な主力製品は、ndarray(または配列)です。コードを変換すると、ほとんどの場合、matlab行列が置き換えられます。matlabマトリックスのように、ndarrayは同種のデータ(つまりfloat64)を格納し、数値演算用に最適化されています。

numpy行列は、ndarrayのサブクラスであり、線形代数を多用するアプリケーションに便利です。2つの違いについて詳しくはこちらをご覧ください。

Pythonリストは、MATLABセル配列に似ています(完全に同じではありませんが)。これは基本的なPythonデータ構造の1つですが、科学的なアプリケーションでは、異種データを保持する必要がある場合に最も頻繁に発生することがわかりました。(または、非常に単純なことをしていて、numpy配列を作成する手間をかけたくない場合)。

上記のコードは、ndarrayを使用し、()を[]に置き換えてインデックスを作成し、インデックスがMATLABでは1、Pythonでは0から始まることを考慮して、ほぼ逐語的にPythonに変換できます。つまり、MATLABの最初の要素は要素1です。 pythonそれは要素0です。

于 2012-06-04T20:57:10.290 に答える
0

この行を1行ずつ試してみましょう。

outframe(:,[4:4:nout-1]) = 0.25*inframe(:,[1:n-1]) + 0.75*inframe(:,[2:n])

「英語」で次のように翻訳されます:アウトフレームのすべての行。ただし、4からnout-1(ie4,8 ..)までの4列ごとのみ。インフレーム参照の意味を理解していると思います。

pos=(beamnum>0)*(beamnum<=nbeams)*(binnum>0)*(binnum<=nbins)*((beamnum-1)*nbins+binnum)

おそらくbeamnumはベクトルであり、(beamnum> 0)は{0,1}のベクトルを返します。要素は「1」で、それぞれのbeamnum要素は> 0、それ以外は0です。残りは明確です。

最後から2番目の行はforループであり、最後の行は明確になっているはずです。

于 2012-06-04T15:46:35.790 に答える