2013-06-18 6 views
0

Мне нужно вернуть совпадения из массива большой ячейки, если одна строка соответствует. Я написал этот код, но похоже, что это не должно быть сложным - код кажется перегруженным. Каков правильный способ сделать это?MATLAB Сопоставьте строку в массиве ячеек, если массив выборочных ячеек

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

Как насчет

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

не проще само по себе, но это мешает repmat :)

Короче говоря, я не думаю, что есть «короткий» способ сделать то, что вы хотите, потому что то, что вы хотите, на самом деле уже действительно специфично и трудно захватывать в родовых операторах. Это нормально, что при таких обстоятельствах вам нужно будет сделать еще немного кодирования.

Кстати, похоже, что ваши входы не являются камерами - зачем еще вам нужны {needle} и mat2cell()? Если у них есть не, мы можем предложить гораздо более простые методы, чтобы добраться туда, где вы хотите (bsxfun, intersect и т. Д.)

Смежные вопросы