2011-11-30 7 views
6

私はmatlabでリスト内包のようなものを探していますが、私はドキュメンタリーでこれを見つけることができませんでした。 PythonでmatlabそれはPythonのようにリストの理解のようなものがありますか?

それはありません、MATLABは、リストの内包表記を持っていない

A=[i/50 for i in range(50)] 
+2

http://www.scipy.org/NumPy_for_Matlab_Users役に立つと思われます。 Numpyでは、速度のリストの理解の代わりに、おそらく 'A = np.arange(50)/ 50.0'を実行することに注意してください。 – mtrw

+0

@mtrw Great link.Thanks –

答えて

10

Matlabのリスト内包表記はあまり有用で作り、直接配列を扱うことができます。焦点はアレイレベルの計算であるべきなあなたは本当に、それを必要としません。例を次のように記述します。

A = (0:49) ./ 50 

Matlabはループを嫌うのでリストの理解度が高いです。つまり、arrayfunの機能を見てください。

+2

MATLAB * hates * loops?そう思わないでください。それはあなたに物事をするための他の方法を提供するだけです。その結果、あなたは結局それらを憎んでしまいます。 – ktdrv

+1

私は最終的にMATLABで一般的なループではなくループを書くのが嫌いです。私と私のMATLABはたくさんのことをしてきました...もしソフトウェアが共感できれば、今度はループも嫌いでしょう。 –

+0

これは、matlabとpythonが似ている領域であることを指摘する価値があります。 Pythonも(Cのようなコンパイルされた言語と比較して)ループ時に遅くなります。計算時間が重要な場合は、通常はnumpyを使用して、可能な限りPythonでベクター化を試みるべきです。 – Caleb

2

ようなものになるだろう。

A = (1:50)/50 
-1

MATLABは「ベクトル化」がとても好きです

0

あなたが何をしようとしていることはあなたは、単にスカラー除算を行うことができ、サンプルと同じくらい簡単です場合:あなたが行うことができます

A = (0:50) ./ 50 
5

(1:50)/50 

以上の一般的な何かのために

[email protected](x) (x/50); 
arrayfun(f,1:50) 
0

Matlabでリストを生成する方法はいくつかありますが、0から49/50まで増分しますサム・ロバーツは、これらのリストのすべてが同等であるべきにもかかわらず、コメントで指摘したように1/50

A = (0:49)/50 

B = 0:1/50:49/50 

C = linspace(0,49/50,50) 

EDITのメントは、数値的な結果は、浮動小数点エラーとは異なります。例:

max(abs(A-B)) 
ans = 
    1.1102e-16 
+1

Aのこれらの値はどれも同じではありません!それらをA、B、Cと呼んで、すべてのものと比較する(A == B)など。コロン、コロン、およびコロンの異なる動作における面白い演習。私はPythonについてゼロを知っていますが、このスレッドの誰かがこれらの3つのMATLABオプションをPythonのリストの理解と比較することができれば有用かもしれません。編集:私の-1を削除し、私は重要な音を意味しなかった、それは良い答えだった。 –

+0

@SamRoberts:それは非常に良い点です。理論的には、すべてのソリューションは同等である必要がありますが、その結果は浮動小数点エラーのために同一ではありません。 – Jonas

+0

私はこれまでのコメントを理解できるように、@Jonasはもともと変数A、B、CをすべてAと呼んでいました。編集後、彼の答えは今よりはっきりしていますが、私のコメントはあまり意味がありません... –

関連する問題