Как деинтерлейсировать вектор? - PullRequest
0 голосов
/ 03 сентября 2018

Как эффективно переупорядочить вектор? Числа представляют собой «кадры» в фильме, которые отсортированы в следующем порядке:

a=[1 4 7 2 5 8 3 6 9];

результатом должен быть массив ячеек с различными потоками, начинающимися с 1,2 и 3:

b{1}=[1 2 3];
b{2}=[4 5 6];
b{3}=[7 8 9];

Сейчас я использую цикл for, но у меня есть подозрение, что это можно сделать более эффективно (т. Е. Меньше строк кода, меньше времени для выполнения), чем цикл for:

for ind=1:3
    b{ind}=a(ind:3:end);
end

Конечный код имеет ind=1:30000 вместо ind=1:3; Есть ли более эффективный способ сделать это?

1 Ответ

0 голосов
/ 03 сентября 2018

Измените a на требуемую форму и используйте индексирование матрицы для доступа к соответствующим строкам.

bmat = reshape(a,k,[]);  %k equals 3 in your example
%bmat(1,:) will be your b{1},   bmat(2,:) --> b{2},   and so on.

Если вам действительно нужно преобразовать его в ячейку, как в вашем вопросе, используйте mat2cell следующим образом:

b = mat2cell(bmat, ones(k,1));    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...