亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

創建指標矩陣

創建指標矩陣

哆啦的時光機 2019-11-19 14:31:04
對于大小為nx 1的向量V,我想創建大小為nx Max(V)的二進制指示符矩陣M,以使M的行條目在相應的列索引中具有1,否則為0。例如:如果V是V = [ 3      2      1      4]指標矩陣應為M= [ 0 0 1 0     0 1 0 0     1 0 0 0     0 0 0 1]
查看完整描述

3 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

關于這樣的指標矩陣的事情是,如果使它稀疏會更好。無論如何,您幾乎總是會與它進行矩陣相乘,因此使該乘法成為有效的矩陣。


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矩陣,稀疏不會帶來太多收益。但是這些示例案例從來都不是您真正的問題。假設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    

稀疏矩陣不僅會在使用的內存方面獲得收益。比較單個矩陣相乘所需的時間。


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.


查看完整回答
反對 回復 2019-11-19
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

您可以簡單地將列索引V與行索引結合在一起以創建線性索引,然后使用它來填充M(初始化為零):


M = zeros(numel(V), max(V));

M((1:numel(V))+(V.'-1).*numel(V)) = 1;


查看完整回答
反對 回復 2019-11-19
  • 3 回答
  • 0 關注
  • 669 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號