首页
/
每日頭條
/
圖文
/
matlab程序基礎知識
matlab程序基礎知識
更新时间:2026-01-15 17:32:17

MATLAB的内存管理是自動完成的,但内存使用不當會造成程序運行效率低下。許多初學者抱怨MATLAB程序慢(效率低),主要原因可能是不了解MATLAB的内存自動管理機制造成的。

MATLAB是以數組(Array)為基本數據單元的一門語言,程序中的一切數據都是數組。MATLAB用連續的内存來存儲數值型數組,當數組大小發生變化時會重新分配一塊合适的内存,把數據複制過去并回收原來的内存。如果數組是在程序運行過程中逐漸“長大”的,MATLAB會反複分配和回收内存,嚴重影響程序的運行效率。為了避免這種情況,可以用zeros函數預先為數組分配合适的内存,然後再對其進行賦值。

另外,MATLAB數組在内存中是按“列優先”的順序存放數組中的元素的。對于多維數組,是按從低到高的維度順序依次存儲數組中的元素的,如下圖所示

matlab程序基礎知識(提高MATLAB程序的效率)1

圖中紅色的序号即為數組在内存中的存儲順序。在程序中對數組進行索引或賦值時,如果能夠按照這種順序來存儲,一方面可以利用計算機的緩存機制,另一方面可以避免程序在内存中的不斷跳轉,從而可以顯著地提高程序的運行效率。如果通過多重循環來存取數據,遵照此原則,最内層循環應該遍曆最低維(列),從内向外,依次向高維過渡。

下面的程序可以比較預分配内存和索引順序對程序運行時間的影響:

% 數組索引效率比較 clear preAllocate = 'on'; %設為off關閉預分配内存 r = 10000;c = 10000; tic if isequal(preAllocate,'on') A = zeros(r,c); %預分配内存 else preAllocate = 'off'; end for m=1:r %行優先 for n=1:c A(m,n) = m n; end end fprintf('行優先,預分配内存 %s, 耗時 \t%f\n',upper(preAllocate),toc) tic if isequal(preAllocate,'on') B = zeros(r,c); %預分配内存 end for n=1:c %列優先 for m=1:r B(m,n) = m n; end end fprintf('列優先,預分配内存 %s, 耗時 \t%f\n',upper(preAllocate),toc)

看一下不同情況下的耗時對比

行優先,預分配内存 OFF, 耗時 407.735436 列優先,預分配内存 OFF, 耗時 1.346732 行優先,預分配内存 ON, 耗時 1.149516 列優先,預分配内存 ON, 耗時 0.412534

可以看出,内存使用不當可以造成近千倍的效率差别。是因為MATLAB慢嗎?

一言以蔽之,為數組預分配内存并遵循“列優先”的原則使用數組中的數據,是提高MATLAB效率的有效途徑。


幾點說明:

  1. 不同類型的數組在内存中的存儲方式也不盡相同,單一數據類型的數組,如數值型數組和字符型數組,在内存中是連續存儲的。而容器型數據的底層單元則可以分開存儲,例如,結構數組一般每個域用連續的内存存儲,不同的域則可以存在不同的位置。這是容器型數據的優勢,局部改動不會影響其他部分。
  2. 稀疏矩陣僅保存非零元素及其下标。
  3. 不同類型的數組預分配内存的方式也不一樣。例如數值型數組一般用zeros函數;字符串型數組用strings函數;元胞數組用cell函數;表則用table函數。詳情可在命令行doc preallocation。
,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
河南省豫劇團八珍湯全場(豫劇八珍湯在新中劇院上演)
河南省豫劇團八珍湯全場(豫劇八珍湯在新中劇院上演)
     6月18日,經典豫劇傳統戲《八珍湯》在新中劇院上演,30歲的演員馬玲(左)在劇中扮演60歲的孫淑林。 (全媒體記者王煜攝)   新疆網訊(全媒體記者王煜)6月18日下午,新疆生産建設兵團豫劇團的演員們在新中劇院獻上了經典豫劇傳統戲《八珍湯》,不少戲迷前來捧場。   “捧一盞熱茶兒寒腸回暖,冰心化淚又濺我叩謝恩人……”演員唱腔蕩氣回腸,抑揚有度,觀衆...
2026-01-15
有志者立遠志無志者常立志(人要立長志不能常立志)
有志者立遠志無志者常立志(人要立長志不能常立志)
  有句話說得好“有志者立長志,無志者常立志。”      有遠見的人總是立長志,他們不因暫時的困難而退縮,他們不被可恥的懶惰所迷惑,他們認準目标發奮努力,他們積極争取從不放棄。盡管經曆了許多酸苦,但最終他們撥散了層層的迷霧,找到了自己萬事如意的歸宿。      無大志的人總是常立志,他們好似有遠大的抱負,總是好高骛遠、眼高手低;他們好似有長遠的志向,總是憤...
2026-01-15
畫師wlop繪畫欣賞(繪畫大神WLOP光與影的交織)
畫師wlop繪畫欣賞(繪畫大神WLOP光與影的交織)
                                                                                         ,
2026-01-15
讓女生心動的撩人情話表白必備(讓女生無法拒絕的表白情話)
讓女生心動的撩人情話表白必備(讓女生無法拒絕的表白情話)
     1、遇上你的感覺,大概是走了很久的路,終于到家了!   2、我是很慢熱的人,但是我保溫性能很好,一旦熱起來,就不會涼下去,比如喜歡你!   3、我雖然不善言辭,但關于愛你,我無法掩飾!   4、我沒有取悅你的天分,但我比誰都認真。   5、對你遷就一生,是我能給你的,蕞好的聘禮!   6、我的生活,就像一杯白開水,但是你的出現,像是在裡面偷偷加了一...
2026-01-15
譚松韻本來就長得很可愛(譚松韻在我們這十年裡面飾演創業女神)
譚松韻本來就長得很可愛(譚松韻在我們這十年裡面飾演創業女神)
  電視劇《我們這十年》播出之後,我們發現,每個演員的表演都很精彩,難怪這部劇能如此火爆。   之前單元劇裡面,我們看到白百何、侯勇、焦俊豔、黃志忠等實力演員,感歎他們已經很驚豔了,如今,我們再一次看到《甄嬛傳》和《延禧攻略》組團演繹《心之所向》單元。      《我們這十年之心之所向》這個單元,譚松韻飾演創業女神李心遙,具有樸實無華的形象,讓人看了心情舒爽...
2026-01-15
Copyright 2023-2026 - www.tftnews.com All Rights Reserved