0

一致する 1 つの行を指定して、大きなセル配列から一致を返す必要があります。私はこのコードを書きましたが、それほど難しいものではないようです。これを行う正しい方法は何ですか?

function locations= MatchRowInHaystack(haystack,needle)
%Returns array locations: where needle matches haystack
%Where Needle is a cell array of identifiers
%And Haystack is a cell array of rows that may match needle.
%Split haystack into cell arrays by row:
rows=mat2cell(haystack,ones(size(haystack,1),1),size(haystack,2));
%Find row in haystack that matches needle row.
locations=find(cellfun(@isequal,rows,repmat({needle},[numel(rows) 1])));
end
4

1 に答える 1

1

どうですか

locations = find( ...
    arrayfun(@(ii) isequal(haystack(ii,:), needle), 1:size(haystack,1)) );

それ自体は単純ではありませんが、repmat:)

要するに、あなたが望むことを行うための「短い」方法はないと思います。なぜなら、あなたが望むことは実際にはすでに本当に具体的であり、ジェネリック演算子でキャプチャするのが難しいからです。このような状況では、自分でさらにコーディングを行う必要があるのは普通のことです。

ところで、あなたの入力はセルではないよう{needle}ですmat2cell()。それらがセルでない場合は、必要な場所を取得するためのはるかに簡単な方法があります ( bsxfunintersectなど)。

于 2013-06-18T22:02:45.727 に答える