2016-10-31 3 views
1

중첩 된 셀 배열에서 셀 함수를 사용할 수 있는지 알고 싶습니다.Matlab에서 중첩 된 셀 배열을위한 셀 함수

3x3 셀 어레이 AB가 있다고 가정 해 봅시다. 각각의 요소는 다시 3x3 셀 배열이고 각 요소는 예를 들어 3x3 매트릭스입니다.

A=cell(3,3); 
    AB=A; 
    for i=1:1:3 
     for j=1:1:3 
      AB{i,j}=cell(3,3) 
     end 
    end 

나는 각 매트릭스에 작업을 수행 할, 따라서 셀 어레이 (죄송이 끔찍한 소리)의 각 요소의 각 요소의 경우, 어떻게 작동까요?

이 같은과, 매트릭스 행의 합을 구축하려는 경우 예는, 것 ...

AB2=cellfun(@sum,AB); 

또는

AB2=cellfun(@sum,AB{:,:}); 

하지만이 작동하지 않습니다. 익명 함수를 사용하여 여러 조합을 시도했지만 작동하지 않았습니다. 이 작업을 수행 할 방법이 있습니까? 아니면 cellfun을 루프에 넣어야합니까?

귀하의 도움에 감사드립니다. 당신이 중첩되지 셀 어레이, 즉, 셀 하나의 수준이있는 경우

안나

답변

1

cellfun 작동합니다. 당신이 행렬의 3 × 3 × 3 × 3 셀 어레이로 배열을 정의하면 당신이 정말로 그것을 행렬의 셀 어레이의 셀 어레이를해야 할 경우 예를 들어, 당신이 둥지 수,

result = cellfun(@(x) sum(x,1), AB, 'uniformoutput', false); 

필요 두 cellfun. 이 느려질 수 : I는 각 매트릭스 의 합계를 얻기 위해 sum(x,1)을 사용하고

result = cellfun(@(ab) cellfun(@(x) sum(x,1), ab, 'uniformoutput', false), AB, 'uniformoutput', false); 

. 행의 합계가 인 경우 12으로 바꿉니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 첫 번째 옵션을 시도해 보았지만 작동했지만 셀 배열의 두 번째 부분으로 계속 작업해야합니다 - 셀 배열'{a, b, c, d} '에 대해 c와 d의 요소를 사용한다고 가정 해 봅시다 . 이것을'cell2mat'을 사용하여 다음 연산을위한 행렬로 변환하고 싶다면 중첩 된 셀 배열의 모양을 유지해야하고 두 번째 옵션 (두 개의 중첩 된'cellfun')을'cell2mat'와 함께 적용 할 수 있습니다 의 합계. – AnnaGT

+0

두 번째 옵션이 더 느리다는 언급을 했으므로 다른 방법이 있습니까? 아니면'{a, b}'를'{a, b, c, d} '형태로 가지고있을 때'{c, d}'를 포함하는 셀 배열로 c와 d를 변환하는 행렬로 변환하는 방법이있다. ? 도움을 다시 한번 감사드립니다! – AnnaGT

+0

@Anna 무슨 뜻인지 이해할 수 없습니다. 죄송합니다. 아마도 작은 수치 예제가 도움이 될 것입니다 –

관련 문제