MATLAB匹配单元格数组中的一行,提供样本单元格数组

时间:2013-06-18 21:37:09

标签: matlab cell-array

我需要从给定一行匹配的大型单元格数组返回匹配项。我写了这段代码,但似乎不应该是这种挑战 - 代码感觉过于紧张。什么是正确的方法?

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

1 个答案:

答案 0 :(得分:1)

怎么样

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

本身并不简单,但它会阻止repmat :)

简而言之,我不认为有一种“短”方式可以做你想要的,因为你想要的实际上已经非常具体,很难在通用运算符中捕获。在这种情况下,你需要自己做更多的编码是正常的。

顺便说一下,您的输入看起来根本不是单元格 - 为什么还需要{needle}mat2cell()?如果他们不是单元格,可以使用更简单的方法获取所需内容(bsxfunintersect等。)