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;
考虑以下因素;
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;