2011-11-30 107 views
6

我正在尋找類似於matlab中的列表推導,但是我無法在紀錄片中找到像這樣的東西。matlab有沒有像列表理解,因爲它是在Python?

在Python中它會是這樣的

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很棒的鏈接。感謝 –

回答

10

Matlab是非常喜歡「矢量化」的。你會寫你的例子:

A = (0:49) ./ 50 

Matlab討厭循環,因此列出理解。這就是說,看看arrayfun函數。

+2

MATLAB * hates * loops?不要這樣想。它只是爲你提供其他的做事方式。結果,你最終會恨他們。 – ktdrv

+1

我最終討厭在MATLAB中編寫循環,而不是一般循環。我和我的MATLAB已經經歷了很多......如果軟件可以有任何移情,它現在也會討厭循環。 –

+0

值得指出的是,這是matlab和python相似的地方。 Python在循環方面也很慢(與像C這樣的編譯語言相比),並且如果計算時間很重要,您應該嘗試在python中儘可能矢量化,通常使用numpy。 – Caleb

2

沒有,MATLAB沒有列表內涵。你真的不需要它,因爲重點應該放在陣列級的計算:

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) 

編輯薩姆·羅伯茨在發言:在評論中指出,即使所有這些名單應該是等價的,計算結果是由於浮點錯誤是不同的。例如:

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

A的這些值都不相同!嘗試將它們稱爲A,B和C並將它們與所有(A == B)進行比較。在冒號,雙冒號和linspace的不同行爲中進行有趣的練習。我對Python一無所知,但如果這個線程中的某個人能夠將這三個MATLAB選項與Python列表理解進行比較,那麼它可能會很有用。編輯:刪除我的-1,我不是故意聽起來很關鍵,這是一個很好的答案。 –

+0

@SamRoberts:這是一個很好的觀點。即使在理論上,所有的解決方案都應該是等價的,但由於浮點錯誤,其結果並不完全相同。 – Jonas

+0

爲了讓人們理解我以前的評論 - @Jonas最初稱他所有的變量A,B和C只是A.在編輯之後,他的答案現在更清晰了,但是我的評論沒有多少意義...... –

相關問題