2017-02-16 26 views
1

私の問題は、他の関数にパラメータを渡すことです。私はvararginをどのように分割し、値をパラメータとして渡すか分からない。cellfunと同様の機能を実装する方法は?

function A = mycellfun(func, varargin) 
    A = cell(size(varargin{1})); 
    for ii = 1:numel(A) 
     A{i} = func(varargin{ ??? }) 
    end 
end 

... 

S = mycellfun(@plus, {1 [2 3]}, {4 [5 6]}) 
+0

このように、あなたがやる方法は... 'cellfun' ... 'cellfun'は何を提供しようとしていますか? – Suever

+0

@Sueverそれはちょうどサンプルです、私のコードは何か異なるでしょう。 – saastn

+0

私はそれを得る。しかし '?'を使って 'for'ループの中で行うことは' cellfun'です。 – Suever

答えて

1

は匿名関数@(varargin)vararginは、単に、セルのアレイとして入力の可変数(varargin)を受け入れ、varargin

inputs = cellfun(@(varargin)varargin, varargin{:}, 'UniformOutput', false); 

の要素のそれぞれのエントリに対応するグループにcellfunを使用する必要がこのセル配列を返します。これは、実際には機能よりも異なるません:

function v = func(varargin) 
    v = varargin; 
end 

したがって、たとえば:

varargin = {{1, 2, 3}, {4, 5, 6}}; 
inputs = cellfun(@(varargin)varargin, varargin{:}, 'UniformOutput', false); 
% {{1, 4}, {2, 5}, {3, 6}} 

そして、あなたはinputsをループし、各セルの要素は、所与の反復のために、すべての入力が含まれますすることができます。 {:}インデックスを使用してカンマ区切りリストを作成し、これをfuncの入力として渡すことができます。

A = cell(size(inputs)); 

for k = 1:numel(inputs) 
    A{k} = func(inputs{k}{:}); 
end 
+0

'@(varargin)varargin'の2番目の' varargin'は関数ですか? – saastn

+1

@saastnいいえ、それは入力のセル配列です。私はもう少し説明して更新しました – Suever

関連する問題