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

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萬元   這一切是如何做到的?   親愛的朋友:   你好,我是富老師品牌創始人韓松庭,當我學會銷售成交技能與公衆演說方法之後,不僅很快實現了日入過千、月入過萬,而且:   創造了一小時賺到15萬的奇迹,這一切,究竟是如何做到的?接下來為你分享一下:  ...
2026-01-31
電視藝術片與紀錄片的不同(傳統工藝植入偶像劇)
電視藝術片與紀錄片的不同(傳統工藝植入偶像劇)
     《隻為遇見你》劇照。   最近開播的電視劇《隻為遇見你》中,少不了走偶像劇路線的甜蜜愛情,但其對傳統工藝與匠人精神的展現引人關注,不僅科普了不少珠寶行業的傳統技藝,頗有新意的是,主創甚至還将推出一部紀錄片作為劇集的“衍生品”。   懷揣匠人之心,打碎花瓶還可以做成首飾?   該劇講述了年輕一代守護中國傳統民營珠寶企業,在競争中頑強生存、謀求革新的故...
2026-01-31
野狼disco 為什麼這麼火(野狼disco為什麼很火)
野狼disco 為什麼這麼火(野狼disco為什麼很火)
  有這麼一首歌,最近在各大 短視頻平台 很火   聽第一遍時感覺很土   聽第二遍時就要搖頭   聽第三遍時就要畫龍、畫彩虹   聽第四遍時,感覺這是歌手 面對失落時,的反抗   聽第五遍時 感覺到歌手 在鼓勵人們 重新振奮   聽第六遍時 可能會讓你流淚、這可真是、土到極緻便是潮、嗨到深處亦悲傷      這首歌畫面感 确實很強。完整的故事,迪斯科的搖擺...
2026-01-31
剛做了人工流産應該注意哪些事項(女性做完人工流産手術後)
剛做了人工流産應該注意哪些事項(女性做完人工流産手術後)
  女性做完人工流産手術後   要注意哪些事項?   1、保持外陰的清潔,嚴禁同房。人工流産術後若過早同房,易造成急性子宮内膜炎、盆腔炎,還可繼發不孕。因此,人工流産術後一月内嚴禁房事。      2、注意休息,加強營養。人工流産術後應卧床休息2—3天,再下床活動,逐漸增加活動時間。   3、觀察出血情況。人工流産術後陰道流血超過一周以上,甚至伴有下腹痛、發...
2026-01-31
貝加爾湖畔音樂介紹(怎樣評價貝加爾湖畔這首歌)
貝加爾湖畔音樂介紹(怎樣評價貝加爾湖畔這首歌)
  初聽不識曲中意,再聽已是曲中人。或許是因為一段曾以為會很長久很長久的感情忽然終止,聽一些對舊事和感情回憶的歌曲都能讓我不受控制的把自己帶入。如果年少的自己不那麼計較,多一些體諒,或許的或許,會有不一樣的結局呢,或許的或許,不會錯過呢,青蔥的我,單純的你。以前還沒分手的時候,我隻是覺得這首歌的旋律好聽,還以為是寫貝加爾湖的甯靜美麗呢。現在才懂,那是對美好的...
2026-01-31
Copyright 2023-2026 - www.tftnews.com All Rights Reserved