Matlab關於記憶體的一點小測試
阿新 • • 發佈:2018-11-01
順手做了點小測試。結果意料之中吧。
問題1:矩陣的維度變化帶來的影響有多大?
問題2:如果是迴圈內的同樣大小的矩陣更新,同名矩陣和異名矩陣效率有差別嗎?
function test_rom() tic; a = ones(1,10000*10000); b = myfun(a); toc; tic; c = ones(1,10000*10000); c = myfun(c); toc; tic; aa = ones(1,10000*10000); bb = myfun1(aa); toc; tic; cc = ones(1,10000*10000); cc = myfun1(cc); toc; end function b = myfun(a) N = 1; M = 1; for i = 1:1000 st = (i-1)*1000 + 1; et = i*1000; b(i,:) = a(st:et); end clear a; end function b = myfun1(a) for i = 1:length(a) b(i) = a(i); end end
結果如下:
結論如下:
1. 同一矩陣維度變換後,效率明顯降低。應用的時候儘量避免同名矩陣的記憶體擴充套件。
2. 矩陣通過子函式size不變化的情況下,更新用原來的矩陣名更快,也節約記憶體空間。
主要還是matlab的記憶體分配原理吧,原函式和子函式共同區域。
另外能向量化還是向量化吧。