色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

幾個Matlab編程中常用的優化技巧

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2022-02-08 15:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:貓叔來源:科學計算Tech微信公眾號

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

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

1. 向量化操作

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

2. 內存預分配

在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秒的時間就運行完成了,可見它們的差距有多大。

3. 按列存儲

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秒。
可以看出,對列操作比對行操作速度要快很多。

4. 數據類型

在Matlab中,數據類型默認是double型,對使用者來說,無需太多關心數據類型當然是省心省力的,但這也帶來了一個問題就是double型占用的內存較多,還有可能拖慢程序的運行速度。所以,在適當的情況下,我們可以把數據類型選擇為邏輯型、字符型、整型等。但這樣還需要注意的一點是,一個變量在改變數據類型時會消耗額外的時間,因此還不如重新建一個新變量。

高效編程的內容就先寫這么多,后面還會繼續補充。下面說一個Matlab調試中斷點設置問題。在一個for循環中,比如for i=1:n,我們想在i=100的進入斷點,這個時候應該怎么用?以前的時候我們都會這么寫。

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

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

Figure 1. 條件斷點設置1

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

Figure 2. 條件斷點設置2

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

審核編輯:何安

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • matlab
    +關注

    關注

    189

    文章

    3001

    瀏覽量

    234074
收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    芯片前端設計中常用的軟件和工具

    前端設計是數字芯片開發的初步階段,其核心目標是從功能規格出發,最終獲得門級網表(Netlist)。這個過程主要包括:規格制定、架構設計、HDL編程、仿真驗證、邏輯綜合、時序分析和形式驗證。
    的頭像 發表于 05-15 16:48 ?391次閱讀

    電子電路設計中常用的接地方式詳解

    在電子電路設計中,接地方式的選擇至關重要,它直接影響到電路的穩定性、抗干擾能力和安全性。以下是電子電路設計中常用的幾種接地方式的詳解: 一、浮地 1. 定義:浮地是指電路或設備與公共地線可能引起環流
    的頭像 發表于 04-17 16:24 ?444次閱讀
    電子電路設計<b class='flag-5'>中常用</b>的接地方式詳解

    如何優化 CPLD 性能

    CPLD(復雜可編程邏輯器件)是一種介于簡單PLD(可編程邏輯器件)和FPGA(現場可編程門陣列)之間的可編程邏輯器件。它們通常用于實現中等
    的頭像 發表于 01-23 10:03 ?575次閱讀

    DIY項目中常用的端子類型

    在DIY項目中,選擇合適的端子類型對于確保電氣連接的可靠性和安全性至關重要。以下是一些常用的端子類型,以及它們的特點和應用場景: 1. 針式端子(Pin Terminals) 特點 :針式端子通常用
    的頭像 發表于 12-29 10:45 ?1333次閱讀

    低壓配電柜中常用的電表有哪些?

    一、 低壓配電柜中常用的電表類型包括: 1. 電壓表 電壓表主要用于測量電壓,廣泛應用于電力系統中。在低壓配電柜中,電壓表被用于測量電源電壓,其顯示范圍一般為0-1000V。電壓表可以分為直流電
    的頭像 發表于 12-25 10:50 ?1848次閱讀
    低壓配電柜<b class='flag-5'>中常用</b>的電表有哪些?

    盤點環境電器中常用的傳感器

    數字化處理和分析。本文將深入探討環境電器中常用的傳感器,包括二氧化碳傳感器、甲醛傳感器、粉塵傳感器和溫濕度傳感器,并揭示它們在提升產品智能化水平和提供健康舒適居住環境方面的重要作用。 二氧化碳傳感器 二氧化碳傳
    的頭像 發表于 12-20 09:21 ?641次閱讀

    求LabVIEW程序代做,關于噪聲測量方面,需要matlab與labview混合編程,涉及優化算法、PID控制等,可帶價聯系

    求LabVIEW程序代做,關于噪聲測量方面,需要matlab與labview混合編程,涉及優化算法、PID控制等,可帶價聯系QQ2789223947
    發表于 12-11 17:27

    工業自動化中常用的傳感器類型

    工業自動化是現代制造業的關鍵組成部分,它依賴于各種傳感器來監測和控制生產過程。以下是一些在工業自動化中常用的傳感器類型,以及它們的主要應用和特點: 1. 接近傳感器 接近傳感器用于檢測物體的接近
    的頭像 發表于 12-06 14:11 ?2154次閱讀

    嵌入式常用總線有哪些

    嵌入式系統中常用的總線種類繁多,它們各自具有不同的特點和應用場景。以下將詳細介紹幾種嵌入式開發中常用的總線,包括UART、I2C、SPI、RS-232、RS-485、CAN以及USB等,每種總線將從其定義、特點、工作原理、應用場景等方面進行闡述。
    的頭像 發表于 09-10 11:34 ?1408次閱讀

    labview中常用的程序結構有哪幾種

    和邏輯的關鍵,以下是LabVIEW中常用的幾種程序結構: 順序結構(Sequential Structure) 順序結構是最簡單的程序結構,它按照從上到下、從左到右的順序執
    的頭像 發表于 09-04 16:32 ?1803次閱讀

    嵌入式常用數據結構有哪些

    在嵌入式編程中,數據結構的選擇和使用對于程序的性能、內存管理以及開發效率都具有重要影響。嵌入式系統由于資源受限(如處理器速度、內存大小等),因此對數據結構的選擇和使用尤為關鍵。以下是嵌入式編程中常用的幾種數據結構,結合具體特點和
    的頭像 發表于 09-02 15:25 ?1037次閱讀

    優化 FPGA HLS 設計

    上設計的。運行多個編譯需要更多的計算能力。這是與時間的權衡。如果可以同時運行更多(使用云)綜合策略,周轉時間將會更短。 如何優化高級設計-Sobel 濾波器 Sobel 濾波器是視頻處理中常用
    發表于 08-16 19:56

    簡述socket編程中的常用函數

    Socket編程是一種基于TCP/IP協議的網絡編程技術,它允許應用程序通過網絡進行通信。在Socket編程中,有許多常用的函數,它們用于創建、配置、連接、發送和接收數據等操作。以下是
    的頭像 發表于 08-16 10:49 ?882次閱讀

    華為設備中常用的RIP命令及其應用

    RIP(Routing Information Protocol,路由信息協議)是一種應用廣泛的距離矢量路由協議,尤其適用于中小型網絡。本文將詳細介紹在華為設備中常用的RIP命令及其應用,以幫助網絡管理員和工程師更好地理解和配置RIP協議。
    的頭像 發表于 08-12 18:10 ?1527次閱讀

    嵌入式系統中常用的五種微處理器類型

    本文介紹了嵌入式系統中常用的五種微處理器類型:微處理器單元(MPU)、微控制器(MCU)、數字信號處理器(DSP)、現場可編程邏輯門陣列(FPGA)和單片機(SBC)。文章詳細闡述了每種處理器的功能、優點、缺點以及選擇建議,并列出了一些精選的微處理器產品,供讀者參考。
    的頭像 發表于 07-25 09:29 ?2645次閱讀
    主站蜘蛛池模板: 孕妇高潮抽搐喷水30分钟 | 精品国产午夜肉伦伦影院 | 欧美深深色噜噜狠狠yyy | 日本精品久久久久中文字幕2 | 亚洲欧美国产综合在线 | 中文字幕亚洲欧美在线视频 | 国产GV天堂亚洲国产GV刚刚碰 | 亚洲伊人情人综合网站 | 婷婷久久无码欧美人妻 | FREESEXVIDEO 性老少配 | 成人影片迅雷下载 | 日韩欧美一区二区中文字幕 | 国产日韩成人内射视频 | 和美女啪啪啪动态图 | 亚洲欧洲久久 | 岛国大片在线播放高清 | 伊人久久一本 | 成人a视频片在线观看免费 成人a毛片久久免费播放 | 火影忍者高清无码黄漫 | 国产精品久久久久秋霞影视 | 四虎精品久久久久影院 | 善良的女房东味道2在线观看 | 国产囗交10p | 亚洲性无码av在线 | 国产 亚洲 中文字幕 久久网 | 野花高清影视免费观看 | 真实农村女人野外自拍照片 | ai换脸女明星被躁在线观看免费 | 9277在线观看免费高清完整版 | 亚洲熟妇色自偷自拍另类 | 果冻传媒视频在线观看完整版免费 | 国产又湿又黄又硬又刺激视频 | 软糯白嫩双性受h | 精品久久久久久久99热 | 嗯啊快停下我是你老师啊H 嗯啊快拔出来我是你老师视频 | 99热国产这里只有精品9九 | 国产剧情在线精品视频不卡 | 国产h视频在线观看网站免费 | 亚洲黄色成人 | 把腿张开老子CAO烂你动态图 | 日韩亚洲欧美中文高清 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品