将稀疏模式应用于 MATLAB 中的另一个矩阵
Applying a sparsity pattern to another matrix in MATLAB
我正在尝试将稀疏模式应用于另一个矩阵。目前我只是在使用 spalloc 之后使用赋值。 MATLAB 警告说这很慢,但它没有提供使其更快的解决方案。如何将 A 的稀疏模式应用于矩阵 FWtrans?
意味着A的零值必须是FWtrans中的零值。只有 A 中有值的索引才能在 X 中具有 FWtrans 的值。
Wtrans = transpose(W);
As = sparse(A);
FWtrans = F * Wtrans;
[m,n] = size(FWtrans);
k = find(As);
X = spalloc(m,n, nnz(A));
% Optimize assignment too speed up
for i = k
X(k) = FWtrans(k);
end
您可以使用 sparse
分配数组并一次性分配所有值,而不是分配稀疏数组然后将值复制到它。
Wtrans = transpose(W);
As = sparse(A);
FWtrans = F * Wtrans;
[m,n] = size(FWtrans);
% unfortunately, sparse takes only row/column coordinates...
[r,c] = find(As);
% but it's more convenient to get the values using indices
v = FWtrans(find(As));
% let sparse allocate a m*n array and
% assign the values v to the proper locations
X = sparse(r, c, v, m, n);
在 find
之后使用 sub2ind
来查找 row/column 坐标可能会更快一些,而不是调用 find
两次,但我有疑问.
我正在尝试将稀疏模式应用于另一个矩阵。目前我只是在使用 spalloc 之后使用赋值。 MATLAB 警告说这很慢,但它没有提供使其更快的解决方案。如何将 A 的稀疏模式应用于矩阵 FWtrans?
意味着A的零值必须是FWtrans中的零值。只有 A 中有值的索引才能在 X 中具有 FWtrans 的值。
Wtrans = transpose(W);
As = sparse(A);
FWtrans = F * Wtrans;
[m,n] = size(FWtrans);
k = find(As);
X = spalloc(m,n, nnz(A));
% Optimize assignment too speed up
for i = k
X(k) = FWtrans(k);
end
您可以使用 sparse
分配数组并一次性分配所有值,而不是分配稀疏数组然后将值复制到它。
Wtrans = transpose(W);
As = sparse(A);
FWtrans = F * Wtrans;
[m,n] = size(FWtrans);
% unfortunately, sparse takes only row/column coordinates...
[r,c] = find(As);
% but it's more convenient to get the values using indices
v = FWtrans(find(As));
% let sparse allocate a m*n array and
% assign the values v to the proper locations
X = sparse(r, c, v, m, n);
在 find
之后使用 sub2ind
来查找 row/column 坐标可能会更快一些,而不是调用 find
两次,但我有疑问.