2016-08-16 2 views
-1

Это код Matlab:vectorising для цикла в Matlab с, если проверяет внутри цикла

new=[]; 
for i=1:size(p,1) 
    if (alpha*p(i,1)+beta*p(i,2)+gamma*p(i,3)-sigma)>0 
    new=[new;p(i,:)]; 
    end 
end 

Здесь p большой массив размером как 300000x3. Массив new получается путем удаления некоторых 3-х кортежей из массива p. Для этого выполняется проверка if. Но это занимает много времени.

Я хочу оформить код, например, получить двоичный массив с 1 для оставшихся точек и 0 для удаленных точек. Затем, используя эти флаги, мы можем быстрее построить массив new. Я прав? Может ли кто-нибудь дать код для векторизации или ускорения вышеуказанного кода?

+0

_ «Может кто-то код для vectorising или ускоряя выше код?» _. Извините, что это не так, как это работает на SO. В следующий раз, когда вы напишете вопрос, попробуйте сначала вставить его в свои слова и приложите свои усилия. Существует также хороший шанс, что вам удалось бы сделать это самостоятельно и узнать что-то как положительный побочный эффект. – patrik

ответ

0

Что-то, как это должно работать

selectRows = (alpha*p(:,1)+beta*p(:,2)+gamma*p(:,3)-sigma)>0; 
new = p(selectRows, :); 
Смежные вопросы