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

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
推荐阅读
派出所戶籍室學生開學辦身份證(中學生急需辦理身份證)
派出所戶籍室學生開學辦身份證(中學生急需辦理身份證)
     安全感滿意度   中學生急需辦理身份證   戶籍警推遲下班解難題   這是我應該做的,就是再晚點兒我也會等,一定要幫你把證辦好……”在臨漳縣公安局張村集鎮派出所,完成辦理身份證手續的中學生和陪其前來的親戚對戶籍民警李海葉連連表示感謝,面對群衆的謝意,李海葉笑着對兩人說道。      原來,11月8日上午,張村集鎮派出所戶籍民警李海葉接到一個電話,一...
2026-01-10
瓊瑤眼中的24位絕世美人(她美貌脫俗如畫中仙子)
瓊瑤眼中的24位絕世美人(她美貌脫俗如畫中仙子)
  提到蔣勤勤,很多人的第一印象可能是:“瓊瑤女郎”,早期瓊瑤的光環讓大多數人都隻注意到了蔣勤勤的美貌,她是真的非常好看,以至于忽略了蔣勤勤的演技,但是她早期演過的武俠或者言情劇,由于她有那種剛烈氣質的古典美,令她可以輕而易舉地駕馭起一些形象,像:練霓裳,趙繡雲,第二夢,明月,沈心慈,玉嬌龍,穆念慈,這些角色上沒有設定重複,也是演什麼就是像什麼,沒有在演自己...
2026-01-10
高分爆笑喜劇(年度爆笑喜劇回歸)
高分爆笑喜劇(年度爆笑喜劇回歸)
  來源于:黃河票務APP   三個小時笑死的年度喜劇,劇情高潮叠起、笑點密集如掃雷,屯好的成噸包袱,全場無尿點,節奏完全流暢,浪到飛起,讓你整個笑完全程,絕對值回票價!      喜劇片《糊塗戲班》最早是由英國著名小說家、戲劇家邁克爾·弗萊恩所創作的,于1982年在倫敦首演,它一問世就引起了觀衆的熱烈反應。   該劇後來多次被改編為電視劇和複排,成為倫敦西...
2026-01-10
紅心芭樂自制飲品不加冰(号稱最難吃水果之一)
紅心芭樂自制飲品不加冰(号稱最難吃水果之一)
     芭樂,這種原産南美洲,我國兩廣、我國台灣省均有栽種的小衆水果,卻成了『難吃水果排行榜』的常客。芭樂也很委屈:我這麼低調冷門,也能躺槍?      說起芭樂,北方的朋友或許比較陌生。其實呀,芭樂被稱作黑暗料理,真不是因為有多難吃,而是它的味道太!淡!了!不甜、不酸、沒味道、籽還多,簡直公開擺爛。      芭樂的名氣,是被某奈雪、某喜茶等新茶飲品牌帶...
2026-01-10
蘇聯為什麼能反攻莫斯科(損失慘重的蘇聯)
蘇聯為什麼能反攻莫斯科(損失慘重的蘇聯)
  1941年6月22日淩晨3點15分,德軍以總兵力550多萬人的空前作戰規模,在4900餘架戰機、3700輛坦克、 47000門大炮、190餘艘艦艇的配合下,對蘇聯發動了代号為“巴巴羅薩”的軍事打擊,襲擊了蘇聯西部邊境的幾個大軍區。德國空軍首先突襲了西部邊境的蘇聯空軍機場,然後大批德軍裝甲坦克集群在寬大的正面向蘇聯發起了快速攻擊,蘇軍被迫應戰……     ...
2026-01-10
Copyright 2023-2026 - www.tftnews.com All Rights Reserved