Reputation: 3526
I feel there should be an easy solution but I can't find it:
I have the sparse matrices A
B
with the same dimension n*n
. I want to create matrix C
which copies values in A
where B
is non-zero.
This is my approach:
[r,c,v] = find(B);
% now I'd like to create an array of values using indices r and c,
% but this doesn't work (wrong syntax)
v2 = A(r,c);
% This won't work either
idx = find(B); % linear indexing, too high-dimensional
v2 = A(idx);
% and create C
C = sparse(r,c,v2,n,n);
Here are some more details:
C(B~=0) = B(B~=0);
won't do it, unfortunately.Matrix is too large to return linear indices.
).Is there really no way to use 2-dimensional indices?
Thanks for your help!
Upvotes: 4
Views: 1426
Reputation: 892
I think C = A .* (B~=0);
should work. Only non-zeros will be accessed in the entrywise multiplication of two sparse matrices so it will be fast.
Upvotes: 4