Возможен ли подход с учетом коэффициента корреляции данных?
У меня есть матрица 64x64x32x90, которая обозначает пиксели в x,y,z, в момент времени t. У меня есть опорный сигнал 1x90, который обозначает поведение, которое я ожидаю для пикселя в некоторой точке (x,y,z). Я строю новое изображение корреляции между каждым пикселем в сравнении с моей ссылкой.
load('DATA.mat');
ON = ones(1,10);
OFF = zeros(1,10);
taskRef = [OFF ON OFF ON OFF ON OFF ON OFF];
corrImage = zeros(64,64,36);
for i=1:64,
for j=1:63,
for k=1:36
signal = squeeze(DATA(i,j,k,:));
coef = corrcoef(signal',taskRef);
corrImage(i,j,k) = coef(2);
end
end
end
Мой процесс слишком медленный. Есть ли способ избавиться от моих циклов или настроить код, чтобы иметь лучшее время выполнения?
1 ответ
Решение
Измените ваши данные таким образом, чтобы первые три измерения были объединены в одно (так что теперь есть 64*64*32 строки и 90 столбцов).
Тогда используйте pdist2
(с 'correlation'
опция) для расчета корреляции каждой строки с ожидаемым рисунком.
Наконец, измените результат в желаемую форму.
DATA2 = reshape(DATA, [],90);
corrImage = 1 - pdist2(DATA2, taskRef, 'correlation');
corrImage = reshape(corrImage, 64,64,32);