2014-02-06 3 views
2

행렬 A (n, m)가 있고 벡터 B (n)에 곱해서 결과 B [n, m] = A [n, m] * b [ 엔]. 새 행렬 C=b*ones(1,m)을 작성한 다음 도트 곱셈을 사용하여 수행 할 수 있습니다. B=A.*C이지만 메모리 낭비입니다 (A 크기는 5000 * 1000 임). 루프를 사용할 수 있습니다. 어쩌면 더 우아한 방법이 있을까요? 단지입니다벡터에 행렬 곱하기

답변

5

사용 bsxfun :

B = bsxfun(@times, A, b(:)); 
0

첫 번째 아이디어는 좋았다. b의 원소로 C를 생성 한 다음 B = A를 곱합니다. * C. 하지만 당신 말이 맞아요, 그것은 많은 기억을 취할 것입니다. 당신이 비슷하지만 행렬 C를 희소 행렬의 대각선으로 만 만들면 같은 일을하지만 많은 메모리를 절약 할 수 있습니다.

B = spdiags(b,0,n,n)*A; 

당신이 행을 확장,하지만 당신은 열 위해 동일을 할 것입니다 왼쪽에서 새로운 대각 행렬을 퍼 팅하고 있기 때문에 귀하의 행렬은 왼쪽에 지금있다.