2011-02-13 91 views
14

說我有一個函數calculateStuff(x),它將一個標量作爲參數並返回一個標量。MATLAB:如何應用函數分組

說我有一個向量X,我想在X每一個部件上應用calculateStuff,並得到結果的矢量作爲回報,並將其存儲在一個新的向量Y.

顯然Y = calculateStuff(X )是非法的,除了循環之外,有沒有辦法可以做到這一點?

+0

是不是所謂的`地圖`? – delnan 2011-02-13 19:40:30

回答

16

你有三個選擇:

  1. 修改calculateStuff,以便它可以採取數組和返回數組
  2. 寫一個循環
  3. 使用arrayfun隱藏循環:Y = arrayfun(@calculateStuff,X)
9

最Matlab操作會讓你輸入一個矩陣並返回一個矩陣。您應該能夠重新編寫calculateStuff()來獲取矩陣並返回矩陣。這通常比用於循環的快得多。 Matlab中的循環在時間上非常昂貴。

你需要看的東西的種類是正常操作的「點」版本。例如,而不是

y = z * x; 

y = z .* x; 

首先會做一個矩陣乘法,這可能不是你想要的矢量化代碼的時候。第二個是逐元素地乘以zx

請參閱here並搜索「點操作」。