中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Matlab高效編程技巧分享

發布時間:2021-08-24 11:44:18 來源:億速云 閱讀:124 作者:chen 欄目:大數據

本篇內容主要講解“Matlab高效編程技巧分享”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Matlab高效編程技巧分享”吧!

??用過Matlab的同學應該都知道,Matlab的慢是出了名的,但是再慢也有優化的方式,下面我們給出幾個Matlab編程中常用的優化技巧。

??在講優化方法之前,首先要說的就是Matlab中用tic toc的方式來計算運行時間,這是個常識。當然,想統計具體的耗時,可以用profile工具。

  1. 向量化操作

??這個應該是用過Matlab的同學都清楚的一點,Matlab中操作向量和矩陣的速度要比使用for循環的速度快很多,是因為其底層調用了高性能線性代數庫BLAS庫和LAPACK庫。這個就不多說了。

  1. 內存預分配

??在Matlab中我們可以定義一個空矩陣

mtx = [];

然后后面再給它加入一些數據,而且這個矩陣大小可以隨著我們填入數據的多少而變化。像下面這個程序

tic
n = 1000;
mtrx = [];
init = 1.0;
for i = 1:n
    for j=1:n
        mtrx(i,j) = init + 1.0;
    end
end
toc

這個程序的運行時間是多久呢?在我電腦上是0.2秒。

??那這個程序有什么問題呢?就是我們沒有為這個矩陣分配一個內存空間,而且在循環中,矩陣大小是變化的,這就導致每次循環時都浪費額外的時間去尋找滿足需求的內存空間,將改變大小后的矩陣整體移動到這個新的內容空間中,并釋放原來的內存空間,這除了會影響代碼的運行效率,還容易形成內存碎片,讓程序越來越難找到滿足條件的內存。

??因此在循環前給矩陣預分配內存是很一個良好的習慣,如果沒有這個習慣,你還可以通過Matlab自帶的代碼檢查器來查看是否存在類似問題。

所以,我們應該把程序修改如下:

tic
n = 1000;
mtrx = zeros(n,n);
init = 1.0;
for i = 1:n
    for j=1:n
        mtrx(i,j) = init + 1.0;
    end
end
toc

這個程序只用了0.007秒的時間就運行完成了,可見它們的差距有多大。

  1. 按列存儲

??Matlab中默認是按列存儲的,也就是說,列向量在內存中是連續排列的,對連續的數據做處理肯定是要快的,所以我們在定義向量時一般都會使用列向量。下面對比矩陣中對行做操作和對列做操作花費的時間。

n = 10000;
mtrx = rand(n,n);
mcol = zeros(n,1);
mrow = zeros(1,n);
tic
for i=1:n
    mcol(i) = sum(mtrx(:,i));
end
toc

我們對矩陣中的每一列都求和,總共用了0.17秒。

tic
for i=1:n
    mrow(i) = sum(mtrx(i,:));
end
toc

再對矩陣中的每一行求和,用了0.8秒。  
可以看出,對列操作比對行操作速度要快很多。

  1. 數據類型

??在Matlab中,數據類型默認是double型,對使用者來說,無需太多關心數據類型當然是省心省力的,但這也帶來了一個問題就是double型占用的內存較多,還有可能拖慢程序的運行速度。所以,在適當的情況下,我們可以把數據類型選擇為邏輯型、字符型、整型等。但這樣還需要注意的一點是,一個變量在改變數據類型時會消耗額外的時間,因此還不如重新建一個新變量。  
??高效編程的內容就先寫這么多,后面還會繼續補充。下面說一個Matlab調試中斷點設置問題。在一個for循環中,比如for i=1:n,我們想在i=100的進入斷點,這個時候應該怎么用?以前的時候我們都會這么寫

for i=1:n
    if(i==100)
        pass
    end
end

??把斷點設置在pass處,但其實不用這么弄。Matlab中提供了條件斷點的設置方式。在循環中右鍵選擇設置條件斷點,如下圖所示。



Matlab高效編程技巧分享

Figure 1. 條件斷點設置1


在下面的窗口中填入條件即可,比如i==100


Matlab高效編程技巧分享

Figure 2. 條件斷點設置2


這樣,當程序運行到i==100時就會進入斷點,不需要自己再寫額外的語句。

 

到此,相信大家對“Matlab高效編程技巧分享”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

四子王旗| 平山县| 临沧市| 邹城市| 镇原县| 盐津县| 宁阳县| 德昌县| 慈溪市| 修文县| 平顺县| 德化县| 眉山市| 邯郸县| 桦川县| 英德市| 沙坪坝区| 阿鲁科尔沁旗| 北流市| 昭平县| 襄城县| 商河县| 太和县| 搜索| 通辽市| 南昌市| 东台市| 金山区| 慈溪市| 织金县| 云梦县| 聊城市| 涿州市| 册亨县| 巴彦县| 策勒县| 桐庐县| 镇原县| 阿拉善右旗| 五家渠市| 临颍县|