在Matlab中創建稀疏矩陣時,您似乎可以創建一個填充有邏輯值或雙值數字的稀疏矩陣。Matlab uint8 sparse
在閱讀時我明白,Matlab不支持其他類型的稀疏矩陣,即uint8
或其他整數。在我的應用程序中,我知道max(values)==16
,並且內存是一件至關重要的事情,因此我想擁有uint8
稀疏矩陣。
有沒有辦法創建一個
unit8
稀疏矩陣?如果不是(很可能),是否有任何明顯的原因爲什麼Matlab沒有實現
uint8
稀疏矩陣?
在Matlab中創建稀疏矩陣時,您似乎可以創建一個填充有邏輯值或雙值數字的稀疏矩陣。Matlab uint8 sparse
在閱讀時我明白,Matlab不支持其他類型的稀疏矩陣,即uint8
或其他整數。在我的應用程序中,我知道max(values)==16
,並且內存是一件至關重要的事情,因此我想擁有uint8
稀疏矩陣。
有沒有辦法創建一個unit8
稀疏矩陣?
如果不是(很可能),是否有任何明顯的原因爲什麼Matlab沒有實現uint8
稀疏矩陣?
我可以看到如何使用uint8
代替double
將是沒有或幾乎沒有改善。
一個稠密矩陣是一個連續的數組,因此不需要額外的索引或構造,每個元素的位置由其在存儲器中的物理位置給出。
但是,稀疏矩陣還需要存儲每個元素索引,這對於2D矩陣來說應該是兩個整數32或64位,以記住每個元素的行和列號。最重要的是,可能會有一些與實現相關的開銷,如樹結構或其他內容,用於使稀疏矩陣操作高效。所以它不是8 uint8
vs 64 double
,內存使用量減少8倍,而是(8 + 32 + 32 + log(n)+ ..)vs(64 + 32 + 32 + log(n) + ..),我猜可能最終會節省10-20%的成本?
此外,如果我沒有記錯,每個存儲器地址現在存儲64位,這是一個double
或8 uint8
打包在一起。這意味着每個條目需要使用一些額外的位來記住哪個uint8
打包在我們需要的內存地址處,並且添加一些額外的位掩碼操作來執行。
所以Mathworks的傢伙可能做了類似的估計,並決定只做double
稀疏矩陣。
嗯,我明白了,這是有道理的。但是在RAM上時我的矩陣爲1.5GB,所以絕對有任何改進都會受到歡迎。謝謝你的洞察力! –
你打算在這個矩陣上做什麼樣的操作? – beaker
主要乘法,但也有一些。用於層析應用中的迭代代數重建技術。那裏使用稀疏矩陣是很常見的。 @beaker –
因此,實施你自己的替代品不會是微不足道的;) – beaker