1. 程式人生 > >Matlab預分配記憶體優化for迴圈

Matlab預分配記憶體優化for迴圈

在Matlab中for迴圈在進行前沒有預分配記憶體。重複擴充套件陣列的尺寸,會花費更多的時間分配記憶體,導致程式效能降低。並且這些記憶體不一定是連續的,這更會減慢程式的操作。因此,我們可以採用預分配陣列空間來解決這一問題。
可以使用zeros和ones函式給數值型陣列分配空間,使用cell函式給單元陣列分配空間,使用struct給結構體分配空間。

一個簡單的例子:分別執行下面兩段程式碼

clear;clc;
tic
A(1) = 1;
for i = 1 : 100000
    A(i + 1) = 5 * A(i);
end
toc

clear;clc;
tic
A = zeros
(1,100000); A(1) = 1; for i = 1 : 100000 A(i + 1) = 5 * A(i); end toc

兩段程式碼唯一的區別就在於第二個中加入了預分配指令A = zeros(1,100000); 從結果可以看到程式碼執行時間大大縮短。

參考資料

第一次寫BLOG,一定有遺漏和缺點,希望以後可以越來越好!

相關推薦

Matlab分配記憶體優化for迴圈

在Matlab中for迴圈在進行前沒有預分配記憶體。重複擴充套件陣列的尺寸,會花費更多的時間分配記憶體,導致程式效能降低。並且這些記憶體不一定是連續的,這更會減慢程式的操作。因此,我們可以採用預分配陣列空間來解決這一問題。 可以使用zeros和ones函式給數

matlab執行出現“變數似乎會隨著迭代次數改變而變化,請分配記憶體,以提高執行速度”問題

這句話大致意思就是: b = 0;for i = 1:3    a(i) = b;end是說變數的長度是變化的,經常在迴圈裡出現,比如上面這個例子,這樣會影響計算速度,最好的辦法是預先定義a的長度,比如b = 0;a = zeros(1,3);for i = 1:3  &nbs

Matlab為結構體陣列分配記憶體

在編寫一個迴圈來給結構體陣列中的某個結構體單元賦值時,matlab會提示“變數‘xxx’似乎會隨著迭代次數而改變,請預分配記憶體以提高演算法效率”。下面介紹一種預分配記憶體的方式: 首先,應該先定義好結構體陣列中的單個結構體的資料結構,如:person=struct('na

Java效能優化--for迴圈

最近在學習關於Java效能優化及JVM的一些知識,無意中想起for迴圈的應用,畢竟太多的演算法題和實際開發都會用到它,也就萌生了對它進行優化的想法。 不過這裡要提出的是,同一段程式碼在不同機器和不同版本jdk中執行可能是會出現很大差別的,我用的jdk版本:1.8.0_1

雜湊桶的分配記憶體的實現形式

之前在書本中使用過的hashtable的時候,總體思想是使用一大片記憶體,然後把key值hash成一個int,找到對應的記憶體的結構的位置,然後找到相應的資料。常用的解決衝突的方式是,需要進行拉鍊,再new一個新結點來表示資料。這是一種實現形式,邏輯上沒有什麼問題。 總體方

MATLAB利用parfor計算多重for迴圈

 當MATLAB程式中出現多個for迴圈時,為提高執行效率,可用如下方式實現迴圈變數索引。 clear; clc; M = 2; N = 3; R = 4; parfor i = 1 : M *

一分鐘瞭解“matlab用矩陣寫法代替for迴圈

K>> [xx,yy]=meshgrid(-3:3,-3:3); K>> [email protected](x,y) x^2+y^2; K>> arrayfun(f,xx,yy) ans =     18    13    1

數字影象處理MATLAB—向量化迴圈分配陣列

優化MATLAB程式碼方法 數字影象處理中: MATLAB是一種專門為陣列運算而設計的程式語言。 這裡討論兩種優化MATLAB程式碼方法。 1. 向量化迴圈: MATLAB會自動處理索引h。當座標中涉及0時,會有混亂之源,因為本書和手冊中反覆強調M

Matlabfor迴圈優化

因為學習和工作的原因,最近又開始使用已經許久沒有接觸的Matlab。在沒有什麼特殊考慮的情況下,信手寫下了下面的m程式碼片段:  1 for i=1:1:(imgHeight-tmpHeight+1) 2 for j=1:1:(imgWidth-tmpWidth+

MATLAB中對矩陣元素操作的for迴圈優化方法

           眾所周知,MATLAB程式效率最低最有潛力的地方便是迴圈了。最常見的迴圈莫過於對矩陣中的每一個元素進行操作,對於程式設計思維還在C語言或者C++,JAVA的人來說,第一反應就是兩層迴圈,先來個 “for i=1:m”對矩陣的行進行迴圈,再來個“for

matlab矩陣內存分配

創建 seconds sed ipp 輸出結果 ont atl tracking 通過 matlab矩陣內存預分配就意味著,劃定一個固定的內存塊,各數據可直接按“行、列指數”存放到對應的元素中。若矩陣中不預配置內存。則隨著“行、列指數”的變大。MATLAB就必須不斷

菜鳥要做架構師——java效能優化for迴圈

完成同樣的功能,用不同的程式碼來實現,效能上可能會有比較大的差別,所以對於一些效能敏感的模組來說,對程式碼進行一定的優化還是很有必要的。今天就來說一下java程式碼優化的事情,今天主要聊一下對於for(while等同理)迴圈的優化。 作為三大結構之一的迴圈,在我們編寫程式碼的時候會經常用到。

matlab運行出現“變量似乎會隨著叠代次數改變而變化,請分配內存,以提高運行速度”問題

實現 targe left 賦值 矩陣 意思 nbsp 三種 detail 這句話大致意思就是: b = 0;for i = 1:3 a(i) = b;end是說變量的長度是變化的,經常在循環裏出現,比如上面這個例子,這樣會影響計算速度,最好的辦法是預先定義a的長度

2.6 使用for迴圈遍歷檔案 2.7 使用while迴圈遍歷檔案 2.8 統計系統剩餘的記憶體 2.9 資料型別轉換計算(計算mac地址) 3.0 資料型別轉換(列表與字典相互轉換)

2.6 使用for迴圈遍歷檔案 open r:以只讀方式開啟 w: 以寫方式開啟 a: 以追加模式開啟 r+: 以讀寫模式開啟 w+: 以讀寫模式開啟(參見w) a+: 以讀寫模式開啟(參見a) rb: 以二進位制模式開啟 read 我們先寫一個檔案,叫1.txt 內容如下 111 22

for迴圈提高記憶體訪問效率的做法

今天寫程式的時候突然想到一點,記錄一下: 計算機記憶體地址是線性排列組織的,而利用for迴圈對高維陣列結構進行遍歷處理的時候,要保證最內層for迴圈遍歷的是高維陣列的最低維度,這樣可以最大化利用CPU的cache,舉個例子: 假設有一個二維影象P(x,y),x為行數,0<=x<=M-1,y為列

java8的新特性之List集合雙層for迴圈效率優化

首先先來一個案例簡單模擬一下: List<String> wifes = new ArrayList<String>(); List<String> husbands= new ArrayList<String>(); for(int i=0;i&

JavaScript——forfor in 的效能比較與for迴圈優化方案

在JavaScript中,我們遍歷陣列的時候經常需要用到for和for in。今天來比較一下這兩個遍歷方法的效能,並提供優化方案。 1.for 和for in的效能比較 我們都知道,for 和for in的時間複雜度一樣,但是其效能有些許差距。具體有多大差距呢,下面我們來

根據影象名字把一個大資料夾中影象分類(matlabfor迴圈中巢狀if語句)

clear; close all; clc; inpath = 'G:\code\xianzhu\Z_CODE\SalBenchmark-master\Data\DataSet1\Saliency\*.png'; %%需要分類的資料夾路徑 %%分類後圖像儲存路徑%% CA_p

巢狀For迴圈效能優化分析

1、案例描述 某日,在JavaEye上看到一道面試題,題目是這樣的:請對以下的程式碼進行優化   [java] view plain copy print? for (int i = 0;&n

論使用HashMap優化雙層For迴圈的實際效能

當需要對兩個集合進行相互操作的時候,一般需要進行雙層For迴圈,但我們知道雙層For在數量越大的時候效能影響越大 這時候我們會想到的其中一種解決方法就是利用Hashmap在查詢資料的高效上來優化雙層For 我利用下面的程式碼來模擬測試兩種情況的效能: public static void main