Более быстрый способ написать это l oop в MATLAB? - PullRequest
0 голосов
/ 30 марта 2020

Есть ли способ сделать это быстрее? Мне нужно выполнить это вычисление около миллиона раз. Кроме того, матрица B имеет размер 20x150x250.

. Имеется вектор dummy_t размера 1xsize_w, скаляр m, скаляр k,d и матрица A того же размера, что и B. Для w так что dummy_t(w) меньше m, я вычисляю это количество. В остальном количество остается неизменным.

  for w=1:size_w
        if dummy_t(w) <= m
            B(dummy_t(w),w,k) = B(dummy_t(w),w,k) - d*A(dummy_t(w),w,k) ;
        end  
  end

1 Ответ

0 голосов
/ 30 марта 2020

MATLAB имеет тип данных logical array, что означает логический массив. Таким образом, мы можем сначала проверить все элементы в dummy_t, используя dummy_t<=m. Затем используйте логическое индексирование, получите все элементы True в логическом массиве.

Затем используйте это в качестве индекса для расчета.

dtleq3logi = dummy_t<=m; % this is a logical array
w = 1:size_w;
dtleq3 = dummy_t(dtleq3logi);
wdtleq3 = w(dtleq3logi);
B(dtleq3,wdtleq3,k) = B(dtleq3,wdtleq3,k) - d*A(dtleq3,wdtleq3,k);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...