考虑以下事项;
A = [1 0 0; 0 2 0; 0 0 5];
B = [2 0 0; 0 4 0; 0 0 10];
A = sparse(A);
B = sparse(B);
C = B./A
我希望matlab
仅对非零条目执行稀疏操作。但它也会对零条目进行操作并返回NAN
。
我在这个网站上看到了一些解决方案。
>> c = B(logical(A))./A(logical(A))
c =
(1,1) 2
(2,1) 2
(3,1) 2
如您所见,这不会保留稀疏结构。
2. Replacing output with zero, where A is zero
如果B./A
是我唯一的操作,这是一个优雅的解决方案。如果我B./A
是更大的操作的一部分怎么办? E.g K = 3*(B./A)*rand(3) + 5*(A./B)*rand(3)
是否有一种简单的方法可以在不获取NAN
的情况下按元素划分稀疏矩阵(具有相同的结构)?
答案 0 :(得分:3)
当您索引(逻辑与否)时,您还需要索引结果以保留稀疏结构。
idx = find(A); %# assumes A and B have the same sparsity pattern!
C = A; %# initialize C to have the correct size and shape
C(idx) = B(idx)./A(idx);
答案 1 :(得分:0)
还有一个选择:
B = spfun(@(x) 1./x, B);
C = A.*B;