2014-12-08 7 views
1

도움에 미리 감사드립니다.다차원 배열에 벡터를 추가 matlab

가정하자 I는 (멀티 D 배열되도록

x(:,:,1) = [1 2; 3 4]; 
x(:,:,2) = [5 6; 7 8]; 

y = [1 2; 5 6]; 

난 (X)의 각 행에 (Y)의 첫 번째 행을 추가하고자되도록 매트릭스 Y가 X가 :, : 1) 및 y의 두 번째 행을 x (:, :, 2)의 각 요소에 추가합니다. 이는 현실적으로

z(:,:,1) = [2 4; 4 6]; 
z(:,:,2) = [10 12; 12 14]; 

(하지 I가 제공하고있는 예) I 매우 큰 다중 D 어레이 X 및 매우 큰 행렬 (Y)이 작업을 수행하고자되도록 배열 (Z)를 생성한다. 그러므로 나는 이것을 가능한 한 효율적으로하고 싶다.

순진한 접근 방식은 루프를 사용하여이를 수행하는 것이지만 이는 효율적이지 않습니다. 효율적인 방법은 bsxfun을 통합하여이 작업을 수행하는 것이지만 접근 방법을 파악할 수는 없다고 생각합니다. y와 x는 동일한 z가 생성되는 한이 작업을 수행하기 위해 재구성 될 수 있으며, 가장 중요한 것은 z를 빌드하는 데 필요한 시간이 for 루프 접근보다 적음을 의미합니다.

내가 원하는 것을 이루는 this을 찾을 수 있었지만, 합계가 아닌 곱셈에만 사용할 수있었습니다. 이 코드를 수정하여 원하는대로 처리 할 수 ​​있지만 더 간단한 접근 방식이 있어야한다고 생각합니다.

답변

3

당신은 bsxfun 필요 permute 약간의 :

z = bsxfun(@plus, x, permute(y, [3 2 1])); 

키가 제대로 y의 치수를 재 배열하는 것입니다 그래서 bsxfun에 의해 수행 싱글 확장은 당신이 원하는 결과를 준다.

+0

굉장한 해결책! 대단히 감사합니다. – HXSP1947