3 回答

TA貢獻1865條經(jīng)驗 獲得超7個贊
關(guān)于這樣的指標矩陣的事情是,如果使它稀疏會更好。無論如何,您幾乎總是會與它進行矩陣相乘,因此使該乘法成為有效的矩陣。
n = 4;
V = [3;2;1;4];
M = sparse(V,1:n,1,n,n);
M =
(3,1) 1
(2,2) 1
(1,3) 1
(4,4) 1
如果您堅持說M是一個完整矩陣,那么事后就可以通過使用full使它變得如此簡單。
full(M)
ans =
0 0 1 0
0 1 0 0
1 0 0 0
0 0 0 1
了解如何使用稀疏矩陣。這樣做將使您受益匪淺。誠然,對于4x4矩陣,稀疏不會帶來太多收益。但是這些示例案例從來都不是您真正的問題。假設(shè)n確實是2000?
n = 2000;
V = randperm(n);
M = sparse(V,1:n,1,n,n);
FM = full(M);
whos FM M
Name Size Bytes Class Attributes
FM 2000x2000 32000000 double
M 2000x2000 48008 double sparse
稀疏矩陣不僅會在使用的內(nèi)存方面獲得收益。比較單個矩陣相乘所需的時間。
A = magic(2000);
tic,B = A*M;toc
Elapsed time is 0.012803 seconds.
tic,B = A*FM;toc
Elapsed time is 0.560671 seconds.

TA貢獻1946條經(jīng)驗 獲得超3個贊
您可以簡單地將列索引V與行索引結(jié)合在一起以創(chuàng)建線性索引,然后使用它來填充M(初始化為零):
M = zeros(numel(V), max(V));
M((1:numel(V))+(V.'-1).*numel(V)) = 1;
- 3 回答
- 0 關(guān)注
- 666 瀏覽
添加回答
舉報