我有一個匿名函數句柄的單元數組,並且想創建一個匿名函數,該函數返回包含每個函數輸出的向量。在MATLAB中結合匿名函數
我有什麼:
ca = {@(X) f(X), @(X)g(X), ...}
我想要什麼:
h = @(X) [ca{1}(X), ca{2}(X), ...]
我有一個匿名函數句柄的單元數組,並且想創建一個匿名函數,該函數返回包含每個函數輸出的向量。在MATLAB中結合匿名函數
我有什麼:
ca = {@(X) f(X), @(X)g(X), ...}
我想要什麼:
h = @(X) [ca{1}(X), ca{2}(X), ...]
的又一種方式是:
您可以使用cellfun到功能應用到每個單元陣列元素,它爲您提供了各自結果的矢量。訣竅是應用一個函數,該函數將一些值插入存儲在單元陣列中的函數句柄中。
ca = {@(X) X, @(X) X+1, @(X) X^2};
[email protected](x) cellfun(@(y) y(x), ca);
給
>> h(4)
ans =
4 5 16
我發現,命名每個功能,我可以讓他們融入一個數組。我不太明白爲什麼這會起作用,但它確實如此。
f = ca{1};
g = ca{2};
h = @(X) [f(X), g(X)];
我覺得應該有一個更簡單的方法來做到這一點。因爲我正在處理未知數量的函數,所以我不得不使用eval()來創建變量,這是一個不好的跡象。另一方面,調用新函數就像它應該的那樣工作。
您可以使用str2func
來創建匿名函數,而不必訴諸eval
:
ca = {@sin,@cos,@tan}
%# create a string, using sprintf for any number
%# of functions in ca
cc = str2func(['@(x)[',sprintf('ca{%i}(x) ',1:length(ca)),']'])
cc =
@(x)[ca{1}(x),ca{2}(x),ca{3}(x)]
cc(pi/4)
ans =
0.7071 0.7071 1.0000
以我的經驗cellfun(或matfun)在遍歷數組非常有效的。這可能是最快的方法。 – denahiro