2011-03-29 7 views
3

설정이 여기에 있습니다. 양수Matlab에서 대형 행렬에 대한 곱셈을 어떻게 가속화/피하는가?

M : sparsified된다 X'X, 즉 임계 화

는 X : 6000x8000 비 희소 행렬

B : 비 제로의 수만

D와 8000x1 스파 스 벡터 크기가 d보다 작은 요소는 0이됩니다. 요소가 수백 개만 남았습니다. 그래서 (X '* X - M)는 많은 작은 원소를 가지고 있으며 희소하지 않습니다.

벡터 y = (X '* X - M) * B를 계산하고 y = X'* (X * B) - M * B로 다시 쓸 수 있습니다. 첫 번째 부분은 빠르지 만 두 번째 부분은 X '* X와 관련이 있으며 매우 느립니다.

이 계산을 가속화하는 데 도움이 될만한 사람이 있습니까?

감사합니다.

답변

1

B이 매우 희박하다는 것을 설명합니다. 길이가 8000 인 열 배열에 수십 개의 0이 아닌 값이 있습니다. 결과적으로 B의 곱셈 속도를 다음과 같이 높일 수 있다고 생각합니다. 첫째, 당신은 B에 비 제로 값의 인덱스를 찾을 수 있습니다 다음과 같이

nzIndex = find(B); 

은 그럼 당신은 y 당신의 계산을 변경할 수 있습니다

Bnz = B(nzIndex); %# Non-zero values in B 
y = X.'*(X(:,nzIndex)*Bnz) - M(:,nzIndex)*Bnz; 
관련 문제