[運算] sparse 矩陣 double int8 資料型態已回收

看板MATLAB作者 (freehunter)時間14年前 (2011/10/19 22:27), 編輯推噓5(5014)
留言19則, 2人參與, 最新討論串1/1
我宣告了一個sparse matrix 如下: A=sparse(100000, 200000, 800000); 這是個10萬乘20萬的矩陣,最多只有80萬個entry不為0 因為我的不為0的item只會是1 所以我想用更小的變數來儲存他,例如 int8 在一般的矩陣下,我可以直接讓 A=int8(A); 可是,當A是sparse時,這個方法就不work了 以前可以宣告 A=zeros(1, 10000, 'int8'); 但是,我不能透過 A=sparse(zeros(100000,200000, 'int8')); 來做轉換,因為裡面的矩陣太大了無法產生。 請問大家有什麼方法可以解決嗎?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.170.26

10/19 22:49, , 1F
一開始就不要建立full的matrix
10/19 22:49, 1F

10/19 22:49, , 2F
sparse除了轉換matrix外,也可以用來建立matrix
10/19 22:49, 2F

10/20 09:14, , 3F
我的第一個指令就是用sparse來建立matrix
10/20 09:14, 3F

10/20 09:14, , 4F
我想知道要怎麼把裡面的東西從double轉成int8
10/20 09:14, 4F

10/20 10:28, , 5F
S = sparse(i,j,s,m,n)
10/20 10:28, 5F

10/20 10:55, , 6F
我懂可以這樣宣告,我的問題是怎麼修改資料型態
10/20 10:55, 6F

10/20 10:55, , 7F
因為存int8對我來說就夠了~~可是我不能轉換
10/20 10:55, 7F

10/20 18:36, , 8F
s可以是int8(1)吧?
10/20 18:36, 8F

10/20 20:27, , 9F
如果讓某個S(col, row) = int8
10/20 20:27, 9F

10/20 20:27, , 10F
使用whos來看記憶體,並沒有下降
10/20 20:27, 10F

10/20 22:10, , 11F
為什麼要某個,你不是全部的entry都可以用int8嗎?
10/20 22:10, 11F

10/21 09:39, , 12F
你可以教我怎麼宣告整個matrix都是int8嗎??
10/21 09:39, 12F

10/21 09:57, , 13F
ones(5,1,'int8')
10/21 09:57, 13F

10/24 10:41, , 14F
但這個方法對於大的sparse matrix不適用耶~~
10/24 10:41, 14F

10/24 11:44, , 15F
okay, my bad.
10/24 11:44, 15F

10/24 11:44, , 16F
sparse只支援double及logical
10/24 11:44, 16F

10/24 11:45, , 17F
而且s一定要是double,只能建出來後再轉。
10/24 11:45, 17F

10/24 11:46, , 18F
但是建立一個十萬乘二十萬,八十萬個不為零的稀疏距陣應該不
10/24 11:46, 18F

10/24 11:46, , 19F
是什麼大問題才是....
10/24 11:46, 19F
文章代碼(AID): #1EdjvXt6 (MATLAB)