Matlab-稀疏元素明智的划分

时间:2017-02-21 07:29:54

标签: matlab sparse-matrix

考虑以下事项;

 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

我在这个网站上看到了一些解决方案。

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

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

2 个答案:

答案 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;