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

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
推荐阅读
發生擦碰自己全責怎麼處理(沒發生碰擦為何承擔事故全責)
發生擦碰自己全責怎麼處理(沒發生碰擦為何承擔事故全責)
     現代快報訊(通訊員 沈木 記者 王瑞)高速行駛途中,邊上車輛突然變道,結果引發兩車碰擦,變道車輛也很委屈,稱自己是由于另一輛車突然變道才導緻事故發生的。3 月 7 日,現代快報記者從南京交警高速十大隊獲悉,近日該事故經交警部門調查後認定,事故由未發生碰擦的白色車輛負全責。這到底是咋回事?   2 月 23 日 15 時,甯合高速施工路段發生一起交通...
2026-01-30
曆史上最惡毒的篡位者(史上第一個成功弑君篡位的是誰)
曆史上最惡毒的篡位者(史上第一個成功弑君篡位的是誰)
  “衆叛親離”一詞經常被用來形容不得人心,陷入完全孤立,這個成語最早是出現在春秋·左丘明《左傳·隐公四年》中的,書中寫道:“阻兵無衆,安忍無親,衆叛親離,難以濟矣。這個事件的主角是衛國的一位國君,他是自立為君,并非是正統傳承,谥号為“前廢公”,所以史書關于他的别稱是“衛前廢公”,他不得兄長的愛護,不得朝臣百姓的擁護,所以最後被國人殺死,此人便是衛州籲,衛莊...
2026-01-30
貴州省矮寨大橋旅遊景點(鴨池河大橋晨景美不勝收)
貴州省矮寨大橋旅遊景點(鴨池河大橋晨景美不勝收)
  在貴陽市清鎮與畢節市黔西縣交界的鴨池河,清晨的鴨池河大橋美不勝收。鴨池河大橋是貴黔高速(貴陽至黔西)控制性工程。大橋建成後,烏江流域的這一段鴨池河風景吸引不少省内外遊客。                     ,
2026-01-30
佛山旋挖樁機操作培訓班(廣東大型旋挖鑽機培訓旋挖樁機回轉無力排查技巧)
佛山旋挖樁機操作培訓班(廣東大型旋挖鑽機培訓旋挖樁機回轉無力排查技巧)
  廣東大型旋挖鑽機培訓旋挖樁機回轉無力排查技巧   故障案例:現有一台旋挖樁機,無論是回轉單獨動作、還是回轉複合動作時回轉動作均顯無力較慢,其他動作無異常。   一、分析故障排查步驟      1.先檢查電器方面原因。測量回轉低壓傳感器反饋電壓值,操作手柄中立時測得電壓值0.5V(屬正常範圍0.4V-0.5V),無異常;操作手柄全程操作時4.3V(屬正常範...
2026-01-30
吳建豪最嗨演唱會(吳建豪在美參加音樂節)
吳建豪最嗨演唱會(吳建豪在美參加音樂節)
     日前,吳建豪到美國SXSW國際音樂節參加演出,這是他出道多年第一次帶上整個樂團參加演出,并且還擔當了閉幕式的壓軸表演。期間路遇兩位女粉絲見到他激動的落淚,抓着他的手說:“從小是看流星花園長大的”因為這個偶遇也引起了路人的注意,紛紛想了解他是誰。   為了此次演出能圓滿完成,吳建豪更是提前兩個月準備和樂手讨論和排練。直到演出第一天還自費租場地排練到深...
2026-01-30
Copyright 2023-2026 - www.tftnews.com All Rights Reserved