2013-01-19 148 views
1

應用函數I具有結構的矩陣:Matlab的:在結構矩陣

s(1:2,1:3) = struct('a',1,'b',2); 

我有了2個INT輸入,並計算根據 一些邏輯一個int值的函數。我如何使用每個結構的字段('a'和'b')作爲該函數的輸入在所有矩陣上應用函數。結果矩陣的大小應該與函數的結果作爲數據一樣。

function f = SomeFunctionIWrote(a,b) 
    %...Some calculations... 
    f = result; 
end 

謝謝, 蓋伊。

回答

3

對陣列的每個元素應用相同的函數是arrayfun是爲什麼構建的(請參閱Loren Shure的this blog post以獲得有用的討論/示例)。

如果f是你的功能和s是結構的陣列領域ab

result = arrayfun(@(x)f(x.a,x.b), s); 

會做的伎倆。如果您之前沒有遇到過這些問題,則@(x)anonymous function

如果函數沒有返回標量,請使用'uniformoutput'選項(設置爲false),以便result成爲單元陣列。

result = arrayfun(@(x)f(x.a,x.b), s, 'uniformoutput', false); 

注1:arrayfun是慢!通常(總是?)比循環慢。它的優點(根據我的經驗/觀點)來自於在代碼發生變化時無需處理矩陣尺寸的大小/形狀,以及代碼更易於閱讀。

注2:您可以使用'uni'0代替'uniformoutput'false保存輸入/線間距,雖然在清晰度

+2

+1,非常優雅的解決方案的費用。 –