我正在嘗試將稀疏模式應用于另一個矩陣。目前我只是在使用 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
uj5u.com熱心網友回復:
您可以使用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);
為了找到行/列坐標而不是呼叫兩次,使用sub2indafter可能會更快一些,但我有我的疑慮。findfind
另請參閱:訪問稀疏矩陣
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/367520.html
標籤:MATLAB
上一篇:將Python物件作為引數傳遞給“parfeval”中的函式
下一篇:如何獲得n:m表?
