1

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!

flag
I don't think MO is the right place for this question, maybe Stack Overflow stackoverflow.com is better. – Zander Mar 29 2011 at 2:29
2 
I agree that this is completely inappropriate, voting to close – Igor Rivin Mar 29 2011 at 2:45

closed as too localized by Igor Rivin, Deane Yang, Dmitri Pavlov, S. Carnahan Mar 29 2011 at 4:28

2 Answers

1

Don't compute the entries that would be multiplied with the zero entries of $B$. That is, take the submatrix $X_{nz}$ of $X$ consisting of those columns corresponding with the nonzero entries of $B$, and take $B_{nz}$ to be the concatenation of all nonzero entries of $B$. Then compute the sparsification of $X^T \cdot X_{nz}$ and multiply that by $B_{nz}$.

link|flag
Thanks! This is what I wanted. – Peter Mar 29 2011 at 4:40
-3

Matlab has a sparse matrix type.

link|flag

Not the answer you're looking for? Browse other questions tagged or ask your own question.