0

我需要从给定一行要匹配的大型单元格数组中返回匹配项。我写了这段代码,但似乎不应该有这么大的挑战——代码感觉过度劳累。这样做的正确方法是什么?

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}and mat2cell()?如果它们不是单元格,则有更简单的方法可以到达您想要的位置(bsxfun,intersect等)

于 2013-06-18T22:02:45.727 回答