усреднение по 3-м тусклому свету в массиве ячеек максимально эффективно - PullRequest
2 голосов
/ 08 мая 2020

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

Я обрабатываю mov ie данные в этом формате:

[data{1:4}] = deal(int16(randi([0 255],200,400,100))); %200px, 200px, 100 frames, 4 similar movies

Где данные представляют 4 разных, но похожих фильма в cell array. Теперь я хотел бы взять среднее значение данных четырех переменных {1: 4}, кадр за кадром. Вот что я придумал:

for frame = 1:size(data{ind},3)
  tmp = zeros(200,400,'int16');
  for ind = 1:4
    tmp = tmp + data{ind}(:,:,frame);
  end
  data_avg(:,:,frame) = tmp./4;
end

есть ли более эффективный (более производительный, без удвоения использования ОЗУ) способ сделать это (я его не нашел)?

1 Ответ

3 голосов
/ 08 мая 2020

самый быстрый подход будет:

data_avg= (data{1}+data{2}+data{3}+data{4})/4;

нет необходимости для l oop.

Это медленнее: mean(double(cat(4,data{:})),4); потому что Matlabs означает неэффективность накладных расходов . ваш для l oop находится посередине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...