2015-06-23 2 views
2

У меня есть ячейка A в Matlab размерности 1x3, например.Сравнение ячейки с вектором в Matlab

A={{1,2,3,4} {5,6} {7,8,9} } 

A содержит все целые числа от 1 до n в порядке возрастания. В примере n=9. Однако количество элементов внутри каждой подячейки может быть разным. Каждая под-ячейка не пуста.

Рассмотрим вектор B размерности nx1, содержащей некоторые целые числа от 1 до n в порядке возрастания (повторы разрешены), например,

B=[1 1 2 2 4 7 7 8 9]' 

Я хочу построить (без петель) вектор C размерности nx1 таким образом, что каждый C(i) говорит который субъячейка из AB(i) принадлежит. В примере

C=[1 1 1 1 1 3 3 3 3]' 
+0

почему нет для петель? В наши дни они могут быть довольно быстрыми –

ответ

0

С этой структурой, A однозначно определяется числом элементов каждого из своих клеток, и результат может быть получен как

C = sum(bsxfun(@gt, B, cumsum(cellfun(@numel, A))), 2)+1; 
0

Я не знаю, является ли это быстрее, чем for петли, но и о том, как

C = arrayfun(@(b) find(cellfun(@(a) any(cell2mat(a) == b), A)), B); 

Пояснение: выбрать каждый элемент b в B; затем выберите каждую под-ячейку a в A и проверьте равенство с b, вернуть индекс подкатегории b является членом.

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