flow
은 네 번째 차원이 항상 2
인 4D 이중 행렬입니다. 루프를 사용하지 않고이 루프를 구현하고 싶습니다.Matlab : 코드에서 루프 제거
기본적으로 3 차원의 각 색인에 대해 flow1
을 크기 block-size
의 정사각형 블록으로 나누고 각 블록의 4 차원에서 값의 평균을 계산 한 다음 해당 값을 다시 4 번째 해당 블록의 모든 요소에 대한 차원
일반적인 값은 [height width N block_size] = [ 480 640 100 8]
입니다. block_size
모두 height
와 width
[height,width,N,~] = size(flow1);
reduced_flow = zeros(size(flow1));
for ii = 1:block_size:height
for jj = 1:block_size:width
for k = 1:N
reduced_flow(ii:ii+block_size-1,jj:jj+block_size-1,k,1) = mean(mean(flow1(ii:ii+block_size-1,jj:jj+block_size-1,k,1),1),2);
reduced_flow(ii:ii+block_size-1,jj:jj+block_size-1,k,2) = mean(mean(flow1(ii:ii+block_size-1,jj:jj+block_size-1,k,2),1),2);
end
end
end
예
flow1 = round(10*rand(4,4,2,2));
block_size = 2;
[flow1 reduced_flow]
ans(:,:,1,1) =
6.0000 4.0000 1.0000 0 4.0000 4.0000 2.2500 2.2500
6.0000 0 2.0000 6.0000 4.0000 4.0000 2.2500 2.2500
0 5.0000 1.0000 3.0000 3.2500 3.2500 2.7500 2.7500
6.0000 2.0000 2.0000 5.0000 3.2500 3.2500 2.7500 2.7500
ans(:,:,2,1) =
7.0000 1.0000 3.0000 4.0000 4.5000 4.5000 2.7500 2.7500
5.0000 5.0000 2.0000 2.0000 4.5000 4.5000 2.7500 2.7500
5.0000 9.0000 6.0000 9.0000 6.7500 6.7500 5.5000 5.5000
4.0000 9.0000 6.0000 1.0000 6.7500 6.7500 5.5000 5.5000
ans(:,:,1,2) =
1.0000 9.0000 7.0000 5.0000 3.2500 3.2500 7.5000 7.5000
2.0000 1.0000 10.0000 8.0000 3.2500 3.2500 7.5000 7.5000
7.0000 10.0000 3.0000 8.0000 6.2500 6.2500 4.0000 4.0000
3.0000 5.0000 4.0000 1.0000 6.2500 6.2500 4.0000 4.0000
ans(:,:,2,2) =
2.0000 3.0000 7.0000 7.0000 2.7500 2.7500 6.5000 6.5000
4.0000 2.0000 5.0000 7.0000 2.7500 2.7500 6.5000 6.5000
1.0000 2.0000 9.0000 6.0000 4.2500 4.2500 4.5000 4.5000
5.0000 9.0000 1.0000 2.0000 4.2500 4.2500 4.5000 4.5000
코드가 무엇을 설명하면 더 좋을 것입니다 –
@LuisMendo 죄송합니다, 제가 알기 론, 뭔가가 떠올랐습니다. – Nishant
위의 아이디어에 따르면 첫 번째 2 차원' [480, 640]'그리고 3 차원'[100]'을 무시한 4 차원'[8]'에서 평균을 계산하시오. 4 차원의 모든 값에 할당하려는 평균값입니다. 3 차원에서 어떤 일이 일어나야합니까? 무시하고 삭제 하시겠습니까? 그리고 나는 당신의 질문을 올바르게 이해하고 있습니까? –