Matlab-稀疏元素明智的除法

Matlab- sparse- element wise division

考虑以下因素;

 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 只对非零条目进行稀疏操作。但它也对零条目和 returnNAN.

进行操作

我在这个网站上看到的解决方案很少。

1. Using logical indexing

>> 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 是更大行动的一部分怎么办?例如 K = 3*(B./A)*rand(3) + 5*(A./B)*rand(3)

有没有一种简单的方法可以在不得到 NAN 的情况下按元素划分稀疏矩阵(具有相同的结构)?

索引时(逻辑与否),您还需要对结果进行索引以保留稀疏结构。

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);

多一个选项:

B = spfun(@(x) 1./x, B);
C = A.*B;