MATLAB記憶體不夠,MATLAB記憶體不夠

2022-06-06 19:41:40 字數 929 閱讀 6521

1樓:

我們先來看一下,oom原因。

首先,你的b應該沒有問題。問題在於你的a,它的maximum size=1000*500000,若每元素佔4位元組,那需要2g左右記憶體。

其次,matlab記憶體使用是根據jvm來的,即你真實記憶體的大小不一定代表matlab就會使用這麼多。如果,你要調整matlab的記憶體大小(但在這裡我看不現實)你可以去網上搜matlab heap size的內容。

再次,按照你提供的關於此程式片段的目的描述,我不知道你有否注意到你在將b轉換到a時,浪費了很多空間?我舉個例子也許你容易明白。假設1000此數字只有在b(500000,2)與b(499999,2)出現,那麼在轉成a時這1000當然就到a的第1000行上去了,但是在a的哪一列?

答案是第500000列,前面的空間全是0。相當於浪費了許多。從另一角度說,你想b的資訊量只有500000*2但是你卻用1000*500000去存它,當然你付出空間的代價想換時間可以理解,但代價太大。

最後,我比較懶,所以沒有花時間來研究你的程式意圖,但是如果你能把你的程式的目的,或者說要解決的問題說說,那我們可以幫你改進演算法,這我相信我們這裡很多人都能幫你做到這一點。

2樓:

請在執行中(特別是出錯前那一刻,或者出錯後檢視一下)觀察如下資料:

min(b(:,2)) 和 max(b(:,2)),看他們是否超出1:1096的範圍。

row,看是否超出500的範圍

把上面三個表示式的具體值貼出來。

3樓:電動爐鉤子

你的b矩陣好像好大啊。不止兩列。是50萬乘多少的矩陣?

你可以把b矩陣儲存到電腦裡,把那兩列單獨提出來組成新矩陣,然後clear b。

4樓:望桂花鈄俏

先查詢下哪個變數的資料量比較大,那就在進入迴圈之前給這個變數預設空間

怎麼用matlab生成迴圈矩陣,matlab,怎樣將每次迴圈中生成的值存在一個矩陣裡?要簡單的方法。。。。。。

影子愛蟲蟲 lihaiyonglhy yahoo.com.cn n點迴圈卷積 x1 x1 zeros 1,n length x1 x2 x2 zeros 1,n length x2 m 0 n 1 t 0 n 1 x2 x2 mod m,n 1 反折h zeros n,n for n 1 n m m...

matlab小波分析方面的問題,matlab小波包和小波分析

問題1是對 的 問題2也是對的 問題3的前半部分,對於頻段的計算也是對的,但是 比較各個頻段的幅值,就可知道訊號的頻率成分 是錯的。小波變換不是純頻域的方法,所以通常的應用是不合適用頻率描述分析的,到了計算結果的頻段這一步已經就完成了。你要得到各個層次結果的頻率值需要將各個層次的結果做fft,然後根...

Matlab中的syms用不了,Matlab 中的syms用不了

syms是matlab自帶的函式 功能是快速生成變數,多個符號定義的簡化 用法 syms arg1 arg2 real 該句法表示syms arg1 arg2 real 為arg1 sym arg1 real arg2 sym arg2 real 的速記符號或者 syms arg1 arg2 該句法...