Как добавить элементы в вектор в цикле

Допустим, у меня есть массив ячеек raweeg, каждая ячейка которого представляет собой матрицу с временными точками в первом столбце и некоторыми маркерами во втором. Я хочу создать вектор для хранения моментов времени, когда маркер не равен -1. Я нашел неэлегантный (и не работающий) способ создать вектор нулей размером 1x1, а затем добавить следующие значения в цикле.

P.S.: Есть ровно 96 значений, отличных от "-1", и соответствующих моментов времени.

startpoints = zeros(1,1);

for i = length(raweeg{1,1}(:,1))
   if raweeg{1,1}(i,2) ~= -1
   startpoints(end+1,1) = raweeg{1,1}(i,1); 
   end
end

Спасибо


person user3503398    schedule 14.04.2014    source источник
comment
Удачи с ответом? Ошибка идентифицируется как отсутствующая 1:, и дается векторизованное решение. Если это работает, пожалуйста, примите. Спасибо! :)   -  person chappjc    schedule 15.04.2014
comment
Спасибо! Я новичок в системе, и это немного запутанно.   -  person user3503398    schedule 17.04.2014


Ответы (1)


Векторизуйте это так, для данной ячейки raweeg:

startpoints = raweeg{1,1}(raweeg{1,1}(:,2) ~= -1, 1);

Это называется логическим индексированием.

Просто убедитесь, что ваши маркеры не генерируются с вычислениями с плавающей запятой, иначе сравнения, скорее всего, часто не будут выполняться.


P.S. Проблема в вашем коде - оператор цикла for, который должен быть:

for i = 1:length(raweeg{1,1}(:,1))

Или лучше for i = 1:size(raweeg{1,1},1).

Без части «1:» у него есть только одна итерация, последняя строка.

person chappjc    schedule 14.04.2014