2015-11-30 1 views
0

У меня есть вектор 64-на-1, который содержит 27 ненулевых значений. Я хочу создать N копии из этого вектора, так что каждая копия содержит только 4 ненулевых значения (в этом случае первые 6 экземпляров будут иметь 4 ненулевые значения, а последняя копия будет содержать только 3 ненулевые значения), используя MATLAB ,Создайте N копий вектора, основанного на числе ненулевых значений в этом векторе

Например:

orig_vector = [0 0 0 0 1 0 0 0 0 5 0 0 0 2 0 1 0 2 3 1 1 ]; 
first_copy = [0 0 0 0 1 0 0 0 0 5 0 0 0 2 0 1 0 0 0 0 0 ]; 
second_copy = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 3 1 1 ]; 

Как это можно сделать?

+0

Вы должны подробно остановиться на этом вопросе, как это вообще непонятно. Пожалуйста, дайте обработанный пример, используя данные меньшего примера. – Dan

+1

См. Функцию «найти» MATLAB, затем введите индексы, которые он возвращает 4 на 4, чтобы заполнить ваши копии (которые вы предварительно заполнили нулями) – BillBokeey

ответ

0

Может быть что-то вроде:

non_zero_indices = find(orig_vector); % get array indices of non-zero elements 
n_non_zero = length(non_zero_indices); 
n_copies = ceil(n_non_zero/4);  % eg. with 6 non-zero elements we will have 2 copies 
new_vectors = zeros(n_copies, length(orig_vector)); % matrix of new vectors where vectors go in rows 

for i=0:n_copies - 2 
    idx = non_zero_indices(1+i*4:4+i*4); 
    new_vectors(i+1, idx) = orig_vector(idx); 
end 
idx = non_zero_indices(1+(n_copies-1)*4:end); % handle end which may have fewer than 4 elements 
new_vectors(n_copies, idx) = orig_vector(idx);