2016-09-21 3 views
0

for 루프를 피하려고합니다. 이전의 모든 게시물을 읽었지만 문제는 해결할 수 없습니다. 나는 MATLAB에서 새롭다. 나의 무지를 사과한다.셀과 행렬이 포함 된 for 루프를 피하십시오.

내가 300x2 셀을 가지고 있으며 각 셀에 128x128x256 매트릭스가 있습니다. 각 이미지는 128x128 픽셀 및 픽셀 당 256 채널이있는 이미지입니다. 300x2 셀의 첫 번째 열에는 평행 한 강도 값이 있고 두 번째에는 수직 강도 값이 있습니다.

내가 원하는 것은 각 이미지의 모든 픽셀을 (각 구성 요소에 대해) 취하여 채널별로 강도 값을 합하는 것입니다. 대신 A와 B를 지정하는 (J :,)

Image_par_channels=zeros(128,128,256); 
Image_per_channels=zeros(128,128,256); 
Image_tot_channels=zeros(128,128,256); 
for a=1:128 
    for b=1:128 
     for j=1:256 
      for i=1:numfiles 
       Image_par_channels(a,b,j)=Image_par_channels(a,b,j)+Image_cell_par_per{i,1}(a,b,j); 
       Image_per_channels(a,b,j)=Image_per_channels(a,b,j)+Image_cell_par_per{i,2}(a,b,j); 
      end 
      Image_tot_channels(a,b,j)=Image_par_channels(a,b,j)+2*G*Image_per_channels(a,b,j); 
     end 
    end 
end 

내가 소개를 속도를 수 있다고 생각 :

내가 가진 코드는 다음과 같다. 그러나 여전히 for 반복문. 내가 전문 지식 부족으로 인해 어떤 성공없이 cellfun을 사용하려고합니다. 나 한테 손을 줘 줄래?

정말 감사하겠습니다.

많은 감사와 좋은 하루 되세요! Y는

답변

0

난 당신이 내가 오랫동안 MATLAB 작동하지 않은

Image_par_channels=zeros(128,128,256); 
Image_per_channels=zeros(128,128,256); 
Image_tot_channels=zeros(128,128,256); 

for i=1:numfiles 
    Image_par_channels = Image_par_channels + Image_cell_par_per{i,1}; 
    Image_per_channels = Image_per_channels + Image_cell_par_per{i,2}; 
end 

Image_tot_channels = Image_par_channels + 2*G*Image_per_channels; 

같은 일을 할 수 있으리라 생각합니다,하지만 난 당신이 뭔가를 할 수있는 것 잊지마. g은 상수입니다.

편집 : +=을 삭제했습니다. 증분 할당은 matlab에서 사용할 수있는 연산자가 아닙니다. 나중에 다른 두 변수가 필요하지 않으면 Image_tot_channels이 루프에 직접 빌드 될 수 있음에 유의해야합니다.

관련 문제