的有效方法我有浮點類型的兩個矩陣:
A
其尺寸7000x100000和
B
其尺寸100000x20。
當我把它們相乘時,即使輸出很小,我的代碼也會消耗我的整個RAM。
有沒有辦法讓這個更高效的內存?我試過this from Matlab help page,但它沒有幫助。相乘兩個非稀疏矩陣
回答
你可以試試,分成塊:
截至A
行:
row_blk = 1000;
C = zeros(size(A,1), size(B,2), class(A));
f = 1; t = row_blk;
while t <= size(A,1)
C(f:t,:) = A(f,t,:)*B;
f = t+1;
t = min(size(A,1), f+row_blk-1);
end
截至A
列:
col_blk = 10000;
C = zeros(size(A,1), size(B,2), class(A));
f = 1; t = col_blk;
while t <= size(A,2)
C = C + A(:,f:t)*B(f:t,:);
f = t+1;
t = min(size(A,2), f+col_blk-1);
end
我運行在GNU驗證碼此代碼的八度和內存消費:
a= rand(7000,100000);
b = rand(100000,20);
是:
Absolute running time: 10.05 sec, cpu time: 9.97 sec, memory peak: 5375 Mb
這個代碼的內存消耗:
a= rand(7000,100000);
b = rand(100000,20);
c = a * b;
是:所以沒有顯著差異觀察
Absolute running time: 14.26 sec, cpu time: 14.19 sec, memory peak: 5376 Mb
!
即使創建矩陣佔用我的RAM – iLoveCamelCase
@iLoveCamelCase正如在其他回答指出,使用循環,你可以創建部分矩陣,乘以它們,保存結果,然後繼續與矩陣的其餘部分 – rahnema1
我使用32位版本的八度。無法創建矩陣a(7000,100000)。錯誤是 - 「錯誤:內存不足或維度對於Octave索引類型來說太大」。所以要使用這種矩陣,你需要64位版本的Matlab/Octave。你的八度64位? – SergV
- 1. 使稀疏矩陣快速地相乘
- 2. 稀疏矩陣 - 矩陣乘法
- 3. 反相稀疏矩陣
- 4. 稀疏矩陣
- 5. 與本徵稀疏矩陣乘法
- 6. Numpy matrix乘積 - 稀疏矩陣
- 7. 稀疏矩陣乘法結構
- 8. 稀疏矩陣乘法的Theano梯度
- 9. Matlab有效的稀疏矩陣乘法
- 10. SciPy的稀疏矩陣乘法
- 11. 稀疏矩陣乘法執行時間
- 12. 稀疏矩陣的乘積列元素
- 13. Java中的稀疏矩陣乘法
- 14. Tensorflow中批量稀疏矩陣乘法
- 15. 稀疏矩陣,鏈表的乘法
- 16. 稀疏矩陣和矩陣
- 17. 用於乘兩個稀疏矩陣的算法
- 18. 我如何乘以C中的兩個稀疏矩陣?
- 19. ValueError在SciPy中取兩個稀疏矩陣的點乘積
- 20. 如何用cuSparse乘兩個稀疏矩陣?
- 21. 通過兩個稀疏矩陣迭代
- 22. 通過稀疏矩陣乘以密集矩形矩陣
- 23. 矩陣(scipy稀疏) - 矩陣(密集; numpy陣列)乘法效率
- 24. 以稀疏矩陣
- 25. 50Kx50K稀疏矩陣
- 26. 稀疏三元組稀疏矩陣matlab
- 27. 稀疏矩陣的非零元素
- 28. Python稀疏矩陣非零值交點
- 29. 確定稀疏矩陣的稀疏性(Lil矩陣)
- 30. 用稀疏矩陣乘二次形式矩陣的算法
矩陣是否具有相同的數字類型?也許如果'A'是一個整數類型,但是'B'是一個浮點類型,那麼'A'會有一些隱式轉換爲浮點運算 - 這會佔用比預期更多的內存。我有點困惑你的矩陣是否稀疏。標籤說'稀疏矩陣',但標題說非稀疏。 – jez
兩者都是浮動的。對不起,我應該提到 – iLoveCamelCase
你可以在乘以它們之前在內存中同時存儲矩陣A和B嗎?只有當你試圖繁殖時,你纔會「脫離內存」嗎? – Shai