首页
/
每日頭條
/
圖文
/
matlab程序基礎知識
matlab程序基礎知識
更新时间:2025-10-29 01:18:15

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
推荐阅读
加拿大國際留學生總量(加拿大國際學生8年增9萬)
加拿大國際留學生總量(加拿大國際學生8年增9萬)
     陳思甯獲錄取美國康奈爾大學商學系。(加拿大《星島日報》/受訪者提供)   中國僑網5月9日電 據加拿大《星島日報》報道, 有本地移民律師上月初對2009至2017年加拿大接收海外留學生,及發出的簽證情況作出檢讨,其中持學生簽證留加的中國學生,由5萬名急增至逾14萬名,移民律師因此促請政府推出疏導措施,為這群留學生提供适當的支持。   加拿大目前接收...
2025-10-29
怎樣去掉訂閱消息(點擊按鈕取消訂閱)
怎樣去掉訂閱消息(點擊按鈕取消訂閱)
  進入臘月,日子過得飛快,眼瞅着就迎來了中國人的傳統節日—春節。大街上、小區裡都挂上了彩燈、紅燈籠,處處煥然一新,還聽到了零星的鞭炮聲,節日的氣氛漸漸濃了起來。回望春夏秋冬的交替,和多數人一樣,受現代工作生活節奏加快的因素影響,不由得生發出無限感慨:“歲月不居、時光如梭”啊!      中國的年文化,汩汩流淌在千千萬萬華夏兒女的血脈之中。關于中國年文化的内...
2025-10-29
好看的甜寵劇推薦幾部前十名(今年最浪漫的5部高甜寵劇)
好看的甜寵劇推薦幾部前十名(今年最浪漫的5部高甜寵劇)
  1.《國王:永遠的君主》      該劇主要是以平行世界為背景,講述了想要關閉次元之門的理科型大韓帝國皇帝李衮,和想要守護朋友及愛情的文科型大韓民國刑警鄭太乙,兩人輾轉于兩個世界互相幫助而發生的一系列故事。該劇的背景是兩個平行存在的世界,一個是大韓帝國,一個是大韓民國,時間跨度同為1994年-2020年。每個人物都在這兩個世界中同時存在,但是因為這是兩個...
2025-10-29
高一必修四三角函數公式和知識點(今日分享高一數學必修四三角函數中的重要公式輔助角公式)
高一必修四三角函數公式和知識點(今日分享高一數學必修四三角函數中的重要公式輔助角公式)
                 ,
2025-10-29
囧媽徐峥賈冰搞笑片段(徐峥囧媽又添兩大笑将)
囧媽徐峥賈冰搞笑片段(徐峥囧媽又添兩大笑将)
  12月3日,徐峥經典“囧途喜劇”最新力作《囧媽》曝光“進擊的莫斯科”特别視頻。預告中,浪漫绮麗的俄羅斯大冒險終于揭開面紗,各種風光奇景令人目不暇接。精彩旅途再添新成員,主演賈冰、郭京飛驚喜亮相。加之此前曝光特約主演袁泉、特别客串沈騰,陣容很是強大。   ▶賈冰是“喜感正直列車員”,郭京飛出演“小助理”   在“進擊的莫斯科”特别視頻中,冰雪世界徐徐展開,...
2025-10-29
Copyright 2023-2025 - www.tftnews.com All Rights Reserved