matlab中矩陣求逆,報錯說內存不足怎麼辦,128g的工作站都跑不下來?
關於out of memory,有一些可行的辦法,主要包括以下幾點。
第一,清除臨時變數。對於不再需要的臨時變數,要及時清除掉,釋放內存。
第二,預分配內存。對於佔用大內存的變數,預先為其分配內存,能夠有效避免內存碎片化導致的out of memory。
第三,使用稀疏變數。對於有大量0的稀疏矩陣來說,稀疏變數佔用內存更小。
第四,pack命令。pack命令能夠整理內存,將碎片化的內存整合起來。
第五,嘗試使用較低精度的運算,比如將double類型改為single。如果可能,可以使用整數類型如int16之類的進行運算。
第六,增大虛擬內存。增大虛擬內存能夠一定程度上彌補物理內存不足的缺點。
第七,僅載入需要的內存。對於大型數據集,可以不用一次性全部載入內存,參考datastore mapReduce等函數的使用。
易夕:MATLAB: 如何用Mapreduce實現100GB數據的去重並排序??zhuanlan.zhihu.com第八,使用tall數組。一些函數支持對tall的運算,tall數組能夠處理無法放入內存的數據。
第九,使用多臺計算機的內存。通過創建計算機集羣能夠利用集羣內所有內存進行計算。
易夕:MATLAB分散式運算:本地計算機集羣配置指南?zhuanlan.zhihu.com第十,升級硬體。軟體不夠,硬體來湊。
易夕:如何配置一臺適合跑MATLAB的電腦?zhuanlan.zhihu.com
矩陣求逆運算量是很大的,大規模的矩陣求逆是可能出現內存不足的。
看看128g是內存容量還是硬碟儲存容量
要是128g的內存的話,那就是軟體和程序的問題了。
要是128g的硬碟儲存的話,,,內存容量就難說了。。。
像matlab R2019b平時計算運行所佔內存就1G
下個cvx,把求逆的過程做成一個解凸優化的模型
MATLAB裏矩陣求逆是很容易出現內存不足的。
基本上10000x10000以上的矩陣求逆我都不會考慮在MATLAB直接用pinv()或者 『』去做了(考慮到我接觸的大部分問題都是病態欠定問題,這裡不考慮inv()的情況)
大矩陣求逆最好還是從演算法上做出改進來入手吧,有很多matrix inversion identity可以看一看是否有用,另外一些large scale SVD的演算法也可以看一看,有時候會有用
可以試試降低精度,比如說用float16
推薦閱讀: