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

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月29日活動預告公開)
賽爾号本周最新活動(賽爾号6月29日活動預告公開)
  賽爾号6月29日的相關預告在近日公開了,本次不僅僅有大暗黑天的最後一位長老登場,更有X戰隊合體進化後的王系精靈實裝,一起來看看相關的預告活動吧。      常長老艾夏拉降臨   黑色的能量,席卷整個宇宙。遠古的封印,此刻終于解封。大暗黑天,八王齊現!她既是大暗黑天最後一員,她又是天蛇星的末代女王。此刻,她将撕裂整個空間。本周主打精靈,怎麼說呢,除了屬性是...
2026-02-01
驚蟄劉芬芳扮演者(驚蟄中的劉芬芳)
驚蟄劉芬芳扮演者(驚蟄中的劉芬芳)
  《驚蟄》中的劉芬芳,《完美關系》中的崔英俊,他一人千面受關注。   文/岩姐 原創内容,抄襲必究!   有些人,不要顔值靠實力,一旦發現他的優秀,就會被他圈粉。      董可飛就是這樣一位演員,年輕時候也是小鮮肉一枚,從出道至今參演作品很多,除了電影、電視劇,還曾經登上過很多聯歡晚會,出演小品也是一絕。   說董可飛是一人千面一點也不過分,從他15歲參...
2026-02-01
龜仙人老頭跳廣場舞卡點(隐秘角落老陳也死了)
龜仙人老頭跳廣場舞卡點(隐秘角落老陳也死了)
  《隐秘的角落》真的是網劇中的良心之作,網上對于該劇都是一緻的好評,就連國際巨星章子怡都親自誇贊,稱起可以與歐美劇相抗衡了。能夠讓該劇有目前這樣成就的原因主要有兩方面,一方面是演員們的精湛演技,秦昊王景春,張頌文以及三位小演員都是實力演技派,尤其要稱贊三位小演員的演技,真的可以給如今隻追求流量的小鮮肉們演得好太多了;第二個方面就是劇本的選取和改編非常成功,...
2026-02-01
網店裝修都需要裝修什麼(網店裝修具體包含哪些内容)
網店裝修都需要裝修什麼(網店裝修具體包含哪些内容)
  在電商平台開店,好的店鋪裝修風格是可以一下子就吸引買家的,這樣不僅可以增加點擊率,還可以大大提高購買率,那網店裝修具體包含哪些内容?接下來我們就來給大家講解一下這方面的内容。      1、店鋪店标設計   店标是作為本身店鋪的标志,要能表現本身的個性、店鋪經營的内容和能夠給人以深刻的印象。店标顯示在您店鋪的左上角。店标也可以用本身的真實照片,這樣讓人感...
2026-02-01
知否中不同時期的漢服(知否中的宋代女子妝容)
知否中不同時期的漢服(知否中的宋代女子妝容)
  序說起來以宋朝為背景的古裝劇不多,大多數都是正史劇,沒有那種可以欣賞男女主羅曼史的偶像劇,前段時間大熱的《知否》也一直被大家探讨背景,不少人都不确定《知否》是不是以宋朝為背景的,實際上這部電視劇是架空曆史,但它的框架還在,電視劇的背景就是在北宋。      從很多細節比如:東京、,燕雲十六州,開封府,通判,官家等等等等,這些也可以證明電視劇的背景是宋朝,...
2026-02-01
Copyright 2023-2026 - www.tftnews.com All Rights Reserved