首页
/
每日頭條
/
圖文
/
matlab程序基礎知識
matlab程序基礎知識
更新时间:2026-01-31 19:40:54

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
推荐阅读
15萬到20萬中型suv哪一款值得選擇(綜合性價比比較高的三款中型SUV)
15萬到20萬中型suv哪一款值得選擇(綜合性價比比較高的三款中型SUV)
  對于大部分的消費者來說,20萬左右的中型SUV具有很強的實用價值,畢竟國内大部分這個級别消費者的核心訴求就是為了代步,說白了就是坐着舒服、開着舒服、用着放心,今天我就為大家挑選3款綜合性價比特别高的SUV車型,本田的CR-V、别克昂科威和雪佛蘭探界者。      第一、本田CR-V   當年這個車簡直就是加價神車,耐用省心就是它的标簽,這幾年的銷量也不錯...
2026-01-31
荒野大镖客2線上版本還需要買嗎(救贖2OL部分不會影響GTAOL)
荒野大镖客2線上版本還需要買嗎(救贖2OL部分不會影響GTAOL)
  Take-Two似乎對《荒野大镖客:救贖2》的OL部分很有自信。在最近的季度财務電話會議上,Take-Two高層Strauss Zelnick被問到《荒野大镖客:救贖2》是否會推出OL部分以及與《GTAOL》的關系時,他是這麼回答的:      “娛樂的體驗是不同的,在這款遊戲中的體驗很難在另外一款遊戲中找到。你不會想‘我現在需要娛樂’。娛樂是你想要一直...
2026-01-31
漫威鋼鐵俠淚目瞬間(漫威最燒錢的片段)
漫威鋼鐵俠淚目瞬間(漫威最燒錢的片段)
  喜歡漫威電影的小夥伴大家好,我是皮影匠!漫威電影之所以如此成功,除了精彩故事的設定以外,還有逼真的特效。衆所周知特效越多投資越高,就是因為漫威舍得花錢,才會帶來這麼多精彩的作品。那麼你知道在《複聯4》中哪些片段最燒錢嗎?         首先就是複仇者為了尋找寶石,準備穿越回到過去時的片段。除了演員是真實的以外,包括複仇者穿戴的戰甲全部都是特效合成的。根...
2026-01-31
曳引電梯家用井道尺寸(曳引家用電梯如何選擇)
曳引電梯家用井道尺寸(曳引家用電梯如何選擇)
  目前市面上主流的兩種家用電梯:曳引電梯和螺杆電梯。曳引電梯工作原理是通過永磁同步主機來帶動鋼絲繩或者鋼帶牽引實現轎廂上下移動,也是目前家用電梯比較常見的一種電梯類型。而曳引電梯又随着技術發展,分為了曳引鋼絲繩電梯和曳引鋼帶電梯兩大類。這兩類曳引家用電梯哪種更适合家庭使用,兩者又有啥區别呢?      傳統鋼絲繩技術成熟,用途廣泛,但是随着使用時間增加,鋼...
2026-01-31
模仿秀郭德綱盧鑫玉浩歡樂喜劇人(模仿郭德綱反而赢了)
模仿秀郭德綱盧鑫玉浩歡樂喜劇人(模仿郭德綱反而赢了)
  文/娛樂酸檸檬   3月29日晚間,《歡樂喜劇人》重新開賽,在經曆了長時間的調整後,各組喜劇人們明顯是有備而來,再加上賈冰和崔志佳的強勢助陣,本期競演的5個節目質量爆棚,使得東方衛視同一時段的收視率達到了0.8676%,位居各大衛視台榜首。      當晚的《歡樂喜劇人》競演,個人認為是7期節目中整體質量最好的一期,賈冰的小品切合當下環境,時效性極強;崔...
2026-01-31
Copyright 2023-2026 - www.tftnews.com All Rights Reserved