3 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
關(guān)于這樣的指標(biāo)矩陣的事情是,如果使它稀疏會(huì)更好。無(wú)論如何,您幾乎總是會(huì)與它進(jì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
如果您堅(jiān)持說(shuō)M是一個(gè)完整矩陣,那么事后就可以通過(guò)使用full使它變得如此簡(jiǎn)單。
full(M)
ans =
0 0 1 0
0 1 0 0
1 0 0 0
0 0 0 1
了解如何使用稀疏矩陣。這樣做將使您受益匪淺。誠(chéng)然,對(duì)于4x4矩陣,稀疏不會(huì)帶來(lái)太多收益。但是這些示例案例從來(lái)都不是您真正的問(wèn)題。假設(shè)n確實(shí)是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
稀疏矩陣不僅會(huì)在使用的內(nèi)存方面獲得收益。比較單個(gè)矩陣相乘所需的時(shí)間。
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貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊
您可以簡(jiǎn)單地將列索引V與行索引結(jié)合在一起以創(chuàng)建線性索引,然后使用它來(lái)填充M(初始化為零):
M = zeros(numel(V), max(V));
M((1:numel(V))+(V.'-1).*numel(V)) = 1;
- 3 回答
- 0 關(guān)注
- 678 瀏覽
添加回答
舉報(bào)