Как найти индекс строки массива ячеек, который соответствует определенной строке ячеек в MATLAB?

Скажем, у меня есть массив ячеек

CELLARRAY = 
{{[]} {[]} {[1 1 1]} {[]} {[]} {[1 1 1]};

{[]} {[]} {[1 1 1]} {[]} {[]} {[]};

{[]} {[]} {[]} {[]} {[]} {[]}}


A = {{[]} {[]} {[1 1 1]} {[]} {[]} {[]}}

Есть ли умный способ найти индекс строки в CELLARRAY это соответствует A? и мой ответ будет 2?

1 ответ

Решение

Вероятно, самым быстрым способом будет цикл for через строки, и JIT-компилятор MATLAB должен быть в состоянии прилично оптимизировать это.

matches = false(1, size(CELLARRAY, 1));

for k = 1:size(CELLARRAY, 1)
    matches(k) = isequal(CELLARRAY(k,:), A);
end

indices = find(matches);

Альтернативно, вы можете использовать что-то вроде cellfun выполнить операцию за вас, но, вероятно, будет медленнее

matches = cellfun(@(x)isequal(x, A), num2cell(CELLARRAY, 2)); 
indices = find(matches)
Другие вопросы по тегам