속도 향상을 위해 중첩 루프없이 "가중 이동 창"을 작성하려고합니다. 나는 이미 흥미 진진한 결과를 얻지 않고서도 arrayfun을 사용하려했지만 어쩌면 잘못된 방식으로 시도했을 것입니다.Matlab - 중첩 루프 피하기
창은 각 위치에서 다른 가중치 (B에 저장 됨)를 가지며 창 내부에있는 행렬 A의 값을 반환하는 행렬 A에 겹쳐 야합니다. B에서). 또한 창은 서로 중첩 될 수 있으며이 경우 최대 값을 유지해야합니다. 마지막으로 창의 크기 및 시프트는 함수의 매개 변수 여야합니다.
그것은 실제로 것을 더 어렵게 보이는, 그래서 나는 당신에게 내가 개선하고자하는 코드를 보여
A = reshape([1:35],7,5)'; % values matrix
B = [1:3;4:6]; % window s weight matrix
% matrices size
[m n] = size(A);
[a b] = size(B);
% window s parameters
shift = 2; % window s movement at each iteration
zone = 3; % window s size (zone x zone)
% preallocation
C = ones(m,n); % to store the right weight to be applied in each position
% loop through positions and find the best weight when they overlap
for i=1:m
for j=1:n
C(i,j) = max(max(B(max(round((i-zone)/shift)+1,1) : min(ceil(i/shift),a) , max(round((j-zone)/shift)+1,1) : min(ceil(j/shift),b))));
end
end
% find the output of the windows
result = C.*A;
내가 자신을 분명하게 희망하지만, 더 많은 정보가 필요한 경우 문의하시기 바랍니다. 도움을 주셔서 감사합니다.
? 두 매개 변수가 정의되지 않으면 게시 된 코드가 실행되지 않습니다. – Jonas
죄송합니다. 해당 행을 복사하여 붙여 넣는 것을 잊었습니다. 그것들은 각각 윈도우의 크기 (존 x 존)와 윈도우의 이동 (즉, 각 반복에서 윈도우의 움직임)을 정의하는 파라미터이다. 코드를 변경 했으므로 이제는 작동 할 것입니다. – Francesco