가정하자 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에서 가장 효율적인 방법은 무엇입니까?가정하자 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에서 가장 효율적인 방법은 무엇입니까?먼저 repmat
을 사용하여 x
번을 바른 다음 요소 단위로 곱하십시오. 당신은 10의 요소 현명한의 벡터에 의해 A
를 곱하여 경우
repX = repmat(x, [size(A, 1), 1, size(A, 3)]);
B = A.*repX;
, 그 대신 스칼라에 의해 단순히 곱에 쉽게되지 않을 것?
B = A * 10;
일반적으로 여기에 repmat
로직이 필요하지 않습니다. bsxfun
트릭을 할 수 있습니다 (그리고 더 빠릅니다). :
B = bsxfun(@times, A, x);
일반적인 해결책이 필요합니다. MathWorks의 bsxfun 페이지를 읽었지 만 올바른 인덱스에 어떻게 곱해 지는지 지정하는 방법을 이해할 수 없습니까? – skr
@skr 이것은 일반적인 해결책이며 아무 것도 지정할 필요가 없습니다. 'bsxfun'은 더 큰 행렬 (우리의 경우'A')의 모든 singelton 차원을 따라 더 작은 행렬 (우리의 경우'x')을 자동으로 복제합니다. 그래서'x'가 행 벡터라면, 그것은 자동적으로 첫 번째와 세 번째 차원을 따라 복제 될 것입니다. –