首页
/
每日頭條
/
圖文
/
matlab程序基礎知識
matlab程序基礎知識
更新时间:2025-12-02 15:23:31

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
推荐阅读
地下城堡2 雲之國攻略(地下城堡2史上最豪華福利活動)
地下城堡2 雲之國攻略(地下城堡2史上最豪華福利活動)
  經典的地牢探險與模拟經營手遊《地下城堡2》将于1月17日推出年度重制版。從遊戲畫面到人物角色都将全面換新,并且會有新的玩法内容更新。      圖1:年度重制版1月17日上線   随着本次更新,遊戲内也将開展各式各樣的福利活動,這在之前的版本中都是沒有的。單看禮包就囊括了登陸、充值等多種類型的禮包,讓人目不暇接。   回家的誘惑一:全服送SS英雄   本...
2025-12-02
道德經反者道之動弱者道之用原文(道德經第四十章反者道之動)
道德經反者道之動弱者道之用原文(道德經第四十章反者道之動)
  詳細解讀《道德經》40      反動弱用   〈原文〉   反者道之動,弱者道之用。   天下萬物生于有,有生于無。   〈注釋〉   反:翻轉,反向,相反。   弱:柔弱。   〈譯文〉   向自己的反面運動,是道的運動特征;   依靠柔弱發揮作用,是道的應用特征。   天地萬物總稱為有,有生于無。   〈解讀〉   本章主要是闡述了道的運動特征和道...
2025-12-02
三千青絲詩句唯美精選50條(浸潤在詩詞中的美妙年華)
三千青絲詩句唯美精選50條(浸潤在詩詞中的美妙年華)
  自古美人歎遲暮,不許英雄見白頭。遲暮真的是一件隻能悲傷無奈的事情嗎?   每個年齡都有每個年齡獨有的美,青絲有鮮活的朝氣美,華發有溫潤的歲月美,它們本就不分伯仲,一樣動人!      衰老是終究不可避免的事,然而現在我們在很多短視頻平台都能看到,一些妝容精緻、服飾考究的阿姨,展現出了這個年齡段獨有的氣質美。   那是閱盡千帆後,被生活打磨出的獨特韻味,雖...
2025-12-02
從此江湖再無的詩句(天下獨步的步非非妙境的非)
從此江湖再無的詩句(天下獨步的步非非妙境的非)
     ​   步,非,煙! 天下獨步的步,非非妙境的非,煙華鼎盛的煙。步非煙這樣解釋自己的名字。   有人說步非煙是武俠作家的“超女”,甚至她的讀者自稱“煙絲”。她的走紅是比較快,因為确實是兼具了實力與偶像元素的武俠寫手。實力,因為她是才女;偶像,因為她是美女。      ​   ​   她的作品文字妖娆豔麗,想象精彩奇特,意境恢宏壯闊。使其成名的《武林...
2025-12-02
單身一姐浙江(她公認的一姐)
單身一姐浙江(她公認的一姐)
  中國乒乓球夢之隊,在世界乒壇一直都是神一般的存在,不可逾越,國寶級運動員更是讓他國垂涎三尺,裡約奧運國乒派出女子“三劍客”丁甯、李曉霞、劉詩雯,這樣一個豪華整容,直接劍指總冠軍,毋庸置疑,三人組中女子單打肯定就在她們中産生,最近手感發燙的丁甯成為最大奪冠熱門。這位“女神”大家有多了解?今天小編就帶你走進她的生活。  丁甯原來還是九零後,出生1990年6月...
2025-12-02
Copyright 2023-2025 - www.tftnews.com All Rights Reserved