2013-05-06 2 views
1

가정하자 I는 행렬 A = 랜드 (2,14,24) 및 벡터 X = 10 개 *들 Elementwise 승산

(1,14)

I는 (A)의 소자 현명한 승산을 원하는이 모든 j = 1,2, ... 14에 대해 B (i, j, k) = A (i, j, k) * x (j) 루프를 실행하지 않고도이 작업을 수행 할 수 있기를 원합니다. MATLAB에서 가장 효율적인 방법은 무엇입니까?

답변

1

먼저 repmat을 사용하여 x 번을 바른 다음 요소 단위로 곱하십시오. 당신은 10의 요소 현명한의 벡터에 의해 A를 곱하여 경우

repX = repmat(x, [size(A, 1), 1, size(A, 3)]); 
B = A.*repX; 
7

, 그 대신 스칼라에 의해 단순히 곱에 쉽게되지 않을 것?

B = A * 10; 

일반적으로 여기에 repmat 로직이 필요하지 않습니다. bsxfun 트릭을 할 수 있습니다 (그리고 더 빠릅니다). :

B = bsxfun(@times, A, x); 
+0

일반적인 해결책이 필요합니다. MathWorks의 bsxfun 페이지를 읽었지 만 올바른 인덱스에 어떻게 곱해 지는지 지정하는 방법을 이해할 수 없습니까? – skr

+1

@skr 이것은 일반적인 해결책이며 아무 것도 지정할 필요가 없습니다. 'bsxfun'은 더 큰 행렬 (우리의 경우'A')의 모든 singelton 차원을 따라 더 작은 행렬 (우리의 경우'x')을 자동으로 복제합니다. 그래서'x'가 행 벡터라면, 그것은 자동적으로 첫 번째와 세 번째 차원을 따라 복제 될 것입니다. –

관련 문제