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

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
推荐阅读
數學活動好吃的水果教案(愛吃的水果教學設計)
數學活動好吃的水果教案(愛吃的水果教學設計)
  教師資格面試考試難度越來越大,其中一方面的難度就體現在課型的增多。小學語文除了閱讀課,還會考查識字寫字課、拼音教學課和口語交際課。其中口語交際作為日常教學中不太常見的課型,難度更大一些,今天中公教師考試研究院以一篇《愛吃的水果》為例,提供了較為詳細的教學設計,看看口語交際教學該如何教。   一、教學目标   1.抓住水果的特點,條理清晰,生動準确地描述水...
2025-12-11
河南各個縣名字難讀(能全部讀對名字的人)
河南各個縣名字難讀(能全部讀對名字的人)
  每一座城市,都有屬于它自身的特色。它們或者并不是那麼出名,但總有一些風土人情或自然風光令人向往。   但是,想去某個地方旅行,你可别首先就被該地的名字給難倒了。今天,小南就來跟大家聊聊河南境内,外地人非常容易讀錯名字的6座縣城。   一、武陟(zhì)縣  武陟位于河南省西北部,是焦作市的下轄縣。武陟縣曆史悠久,據資料記載,隋開皇十六年(即公元596年)...
2025-12-11
畫江湖之不良人完整(李硯畫江湖之不良人正在熱播)
畫江湖之不良人完整(李硯畫江湖之不良人正在熱播)
     近日,改編自 國漫 IP 《 畫江湖之不良人 》,由 童輝、王豐 執導, 李硯、曹賽亞、陳添祥、何依蔓、于雷等主演,正在芒果 tv 全網獨播。 該劇自開播以來 備受關注,角色話題熱議不斷。這也是李硯繼上一部院線作品《天之書》之後的又一新作,也是他少有的古裝角色之一。      李硯在《畫江湖之不良人》中飾演的男主李星雲是一名神秘的孤兒,機緣巧合下被...
2025-12-11
愛豆的邪笑殺合集(搖滾愛豆們是如何被玩壞的)
愛豆的邪笑殺合集(搖滾愛豆們是如何被玩壞的)
     追星之路千千萬。作為骨灰級歌迷的我們曾經曆過日複一日的單曲循環,穿到塑性形變的Logo文化衫,逢人便安利的變态志願宣傳……這其中有思君不見之苦,也有超然自得之甜。然而近日外網流傳的幾部“追星”小說成了追星界的一大奇談與壯舉。妄想長得像現實,歌迷們此刻揚眉吐氣。快搬好小闆凳,我們來一探究竟。   翻譯編輯:李僞搖      瑪麗蓮·曼森奇遇記    ...
2025-12-11
家庭應該準備多少現金流(我該如何獲得自由)
家庭應該準備多少現金流(我該如何獲得自由)
     人人都有故事   這是有故事的人發表的第1139個作品   作者:小土豆也能發芽   配圖:網絡(除注明外)   一2018年11月末,我被家裡趕出來,開始了一個人租房的日子。房子租在單位對面,每天上下班隻需要步行幾百米。日子過得不錯,每天笑呵呵的。但快樂隻持續到今年年初,我媽給我打電話,說家裡的珍珠鳥死了。   我家有三隻珍珠鳥,剛開始我隻養了一...
2025-12-11
Copyright 2023-2025 - www.tftnews.com All Rights Reserved