91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

晋江市| 广西| 砀山县| 墨江| 卢湾区| 洞头县| 稻城县| 大同县| 扬中市| 新干县| 乡宁县| 惠安县| 宣化县| 朝阳区| 淳化县| 新邵县| 公主岭市| 京山县| 大余县| 镇赉县| 上饶市| 和林格尔县| 天祝| 昭觉县| 江西省| 宣威市| 栾城县| 福安市| 西林县| 同德县| 棋牌| 永泰县| 临武县| 阳新县| 新龙县| 冷水江市| 荔浦县| 玉林市| 高青县| 勃利县| 崇信县|