臨兵鬥者皆陣列在前
2007-08-08 13:35:03 UTC
如題,最近因為研究需要,要測試電腦是否有辦法計算兩個一萬X一萬的矩陣相乘
普通的矩陣好像不行吧....不過我要測的是稀疏矩陣
好像C/C++跟Fortran都有支援稀疏矩陣的算法
不過我只會java 所以來請教一下各位了orz
1.如何產生稀疏矩陣?
因為我才剛學java沒多久,所以用了能想到最直覺的方法,
也就是跑兩次巢狀迴圈,第一次給random值(0~1),這麼一來應該會有一半左右的值為0
接著第二次巢狀迴圈把原本矩陣中為1的值再給一次random值(0~9),
這麼一來最簡單的稀疏矩陣寫法便完成了orz
請問有更好的寫稀疏矩陣的方法嗎?一半以上的值為0的矩陣應該就是稀疏矩陣了吧
2.兩個矩陣相乘的寫法??
如果只是 data3[i][j] == data1[i][j]*data2[i][j] 這樣的話我是會寫啦
不過矩陣相乘應該不是這樣乘的吧orz,請問矩陣相乘的程式怎麼寫呢?
3.兩個大量稀疏矩陣相乘的寫法?
會寫矩陣相乘的程式後,接下來就是要處理稀疏矩陣了;因為稀疏矩陣有許多零值的關係
所以一般情況下應該有一些方法可以來縮減資料量,以達成大量稀疏矩陣的相乘
一般矩陣的話,兩個一萬X一萬矩陣相乘電腦應該就爆了吧orz
如果是稀疏矩陣的話,不知道有什麼方法可以順利計算出來呢??
http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/SparseMatrix.htm
上面這個網站有介紹稀疏矩陣與索引陣列之間的轉換,也有java程式可以看
不過給的卻是把已知索引陣列轉成稀疏矩陣的程式orz
所以我自己又寫了一個相反過來的程式,也就是把稀疏矩陣轉成索引陣列的程式
網頁說轉成索引陣列可以利用較少的記憶體空間儲存完整的矩陣資訊
這樣的方法可以幫助用來計算稀疏矩陣嗎? 因為計算時還是要轉回來吧
所以感覺對"計算"好像沒有很大幫助orz
抱歉問題很多 麻煩java高手們解惑了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.212.147
※ 編輯: kians 來自: 61.230.212.147 (08/08 21:37)
普通的矩陣好像不行吧....不過我要測的是稀疏矩陣
好像C/C++跟Fortran都有支援稀疏矩陣的算法
不過我只會java 所以來請教一下各位了orz
1.如何產生稀疏矩陣?
因為我才剛學java沒多久,所以用了能想到最直覺的方法,
也就是跑兩次巢狀迴圈,第一次給random值(0~1),這麼一來應該會有一半左右的值為0
接著第二次巢狀迴圈把原本矩陣中為1的值再給一次random值(0~9),
這麼一來最簡單的稀疏矩陣寫法便完成了orz
請問有更好的寫稀疏矩陣的方法嗎?一半以上的值為0的矩陣應該就是稀疏矩陣了吧
2.兩個矩陣相乘的寫法??
如果只是 data3[i][j] == data1[i][j]*data2[i][j] 這樣的話我是會寫啦
不過矩陣相乘應該不是這樣乘的吧orz,請問矩陣相乘的程式怎麼寫呢?
3.兩個大量稀疏矩陣相乘的寫法?
會寫矩陣相乘的程式後,接下來就是要處理稀疏矩陣了;因為稀疏矩陣有許多零值的關係
所以一般情況下應該有一些方法可以來縮減資料量,以達成大量稀疏矩陣的相乘
一般矩陣的話,兩個一萬X一萬矩陣相乘電腦應該就爆了吧orz
如果是稀疏矩陣的話,不知道有什麼方法可以順利計算出來呢??
http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/SparseMatrix.htm
上面這個網站有介紹稀疏矩陣與索引陣列之間的轉換,也有java程式可以看
不過給的卻是把已知索引陣列轉成稀疏矩陣的程式orz
所以我自己又寫了一個相反過來的程式,也就是把稀疏矩陣轉成索引陣列的程式
網頁說轉成索引陣列可以利用較少的記憶體空間儲存完整的矩陣資訊
這樣的方法可以幫助用來計算稀疏矩陣嗎? 因為計算時還是要轉回來吧
所以感覺對"計算"好像沒有很大幫助orz
抱歉問題很多 麻煩java高手們解惑了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.212.147
※ 編輯: kians 來自: 61.230.212.147 (08/08 21:37)