首页
/
每日頭條
/
圖文
/
matlab程序基礎知識
matlab程序基礎知識
更新时间:2025-11-23 22:42:08

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
推荐阅读
一拳十大最強s級英雄(新英雄協會12位S級解析)
一拳十大最強s級英雄(新英雄協會12位S級解析)
  關注ONE老師原作版一拳超人漫畫的小夥伴,想必對新英雄協會NEO并不陌生。作為英雄協會的對家,它不僅網羅了脫離英雄協會的原S級英雄,更有一些已出場人物的關系者包括在其中。本篇拾溜就來介紹将成為新英雄協會的12位S級英雄的強力角色,内容僅供參考。      殺手艾(殺し屋エー)   成為英雄之前,他是特A級懸賞犯,雖然相比S級的索尼克低一級,他仍擁有對于擊...
2025-11-23
鹿鼎記和天龍八部相同演員(天龍八部鹿鼎記之後她光芒不再)
鹿鼎記和天龍八部相同演員(天龍八部鹿鼎記之後她光芒不再)
     《知否知否應是綠肥紅瘦》收官之後,當下熱播的各部古裝劇平分秋色,最近話題度比較高的,除了《東宮》和《獨孤皇後》以外,大概就是劇名相當惹眼的《招搖》了。      大概是因為與才播出不久、由楊幂主演的古裝玄幻劇《扶搖》劇名高度重合,網友們對這部劇的吐槽和議論不斷。不過從這部劇中,卻有另外一個值得注意卻被大多數網友忽略的點,那就是其中獨孤修的扮演者竟然...
2025-11-23
體檢的方式(原來是這樣體檢的)
體檢的方式(原來是這樣體檢的)
  被譽為“中國天眼”的500米口徑球面射電望遠鏡(FAST)即将迎來落成3周年。   FAST于2016年9月25日落成啟用,它是具有我國自主知識産權、世界最大單口徑、最靈敏的射電望遠鏡。      8月28日,工作人員在引導FAST饋源艙下降以進行檢修。新華社發   截至2019年8月28日,FAST已發現132顆優質的脈沖星候選體,其中有93顆已被确認...
2025-11-23
那些年看過的超好看的泰劇(這些甜到令人心動的泰劇你看過嗎)
那些年看過的超好看的泰劇(這些甜到令人心動的泰劇你看過嗎)
  最近飯哥發現了一部高顔值的泰劇《逐月之月》,這部劇剛開始光看劇照就被男主的顔值迷得不要不要的~雙向暗戀的設定簡直太戳萌點了,現在隻更新到第二集,等待更新日子太難熬。同時呢,飯哥也整理了幾部同樣甜到令人心動的泰劇,和大家一起分享。   《逐月之月》   《逐月之月》根據泰國暢銷小說《Two Moons》改編,主要講述了一個理工學院院草暗戀校草學長的故事,由...
2025-11-23
最新韓國古裝高分b級電影推薦(豆瓣8.3分的R級片)
最新韓國古裝高分b級電影推薦(豆瓣8.3分的R級片)
  美輪美奂的西部風景,動聽悅耳的音樂,六則寓意深刻的故事娓娓道來,看科恩兄弟的新作,再一次被故事的強烈宿命感震撼到,看完回味無窮。   時隔兩年,伊桑·科恩和喬爾·科恩終于又帶來一部新作《巴斯特·斯克魯格斯的歌謠》,看片名差點以為是紀錄片,又或者歌舞片。      《巴斯特·斯克魯格斯的歌謠》在豆瓣評分高達8.3分,好于92%的西部片,好于92%的喜劇片,...
2025-11-23
Copyright 2023-2025 - www.tftnews.com All Rights Reserved