Peter
Peter

Reputation: 83

How to accelerate/avoid multiplication for large matrices in Matlab?

The setting is here.

X: 6000x8000 non-sparse matrix

B: 8000x1 sparse vector with only tens of non-zeros

d: positive number

M: is sparsified X'X, i.e. thresholding the elements smaller than d in magnitude to be 0. Only hundreds of elements are left. So (X' * X - M) have many small elements and is not sparse.

I want to compute the vector y=(X' * X - M)* B and can rewrite as y=X' * (X * B) - M*B. The first part is fast enough, but the second part involves X'*X, and is very very slow.

Could any one help me to accelerate this computation?

Thanks a million!

Upvotes: 3

Views: 836

Answers (1)

gnovice
gnovice

Reputation: 125874

You explain that B is very sparse: tens of non-zero values in a column array of length 8000. As a result, I think you can speed up your multiplications by B as follows. Firstly, you can find the indices of the non-zero values in B:

nzIndex = find(B);

Then you can change your computation of y as follows:

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

Upvotes: 1

Related Questions