Re: [問題] 請問矩陣執行速度的問題

看板MATLAB作者 (如果狗狗飛上天)時間19年前 (2005/11/30 21:16), 編輯推噓6(603)
留言9則, 6人參與, 最新討論串1/1
※ 引述《feignaz (怎能讓妳知道)》之銘言: : 在進行一個龐大的矩陣運算時,若已知矩陣的維度n : 先開好zeros(m,n) 在運算上是否會比較快? : 例如: : A=[1 2 3; : 4 5 6; : 7 8 9] : B=[5 5 7] : 法1 C=[A A;B B] : 法2 C=zeros(4,6); : C(1:3,1:3)=A; C(1:3,4:6)=A; : C( 4 ,1:3)=B; C( 4 ,4:6)=B; : 請問欲產生矩陣C : 2種方法何者較好?? : 謝謝! 兩個方法應該差不多! 需要作預先配置的目的主要是為了在運算 過程中,避免系統一直像記憶體要空間. 像你的case,法一只需要跟記憶體要一次空間,可是法二也是要一 次空間,這樣做預先配置就沒多大的意義了.甚至有點多此一舉. 我猜這樣應該會達到反效果,拖延執行時間. 預先配置的功能主要有兩個: 1.避免程式出錯 (當你填入的元素超過預先配置的,很可能就是你程式有寫錯) 2.減少系統跟記憶體要空間的次數(加快速度) (例子如下) 常見的預先配置通常是搭配迴圈在使用. 例如: A=zeros(100,1); for n=1:100 A(n)=n; end (當然,你如果需要產生一個這樣的向量其實不需要用for,但是這 是在舉例) 像上面的例子,如果你沒有先配置A,那麼for迴圈每作一次就要把 A向量多撐大一個元素,換言之,必須要跟記憶體要一個空間,所以 你做一百次,就要做一百次要空間的動作. 可是如果我們在for外面就先配置好大小了,那麼從頭到尾只做過 一次要空間的動作,之後就只是在改變裡面元素的數值. 這樣明白嗎? -- ★我喜歡夏天,就像我喜歡看著穿上白衣黑裙的妳★ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.89.97

11/30 23:16, , 1F
超明白,可以給個M嗎?
11/30 23:16, 1F

12/01 01:16, , 2F
請問如果在for前用 a=[]有何好處(我有看到一些範例是這樣用的)
12/01 01:16, 2F

12/01 01:36, , 3F
空矩陣好像是用在字串吧! 要字串資料結構的空間
12/01 01:36, 3F

12/01 01:37, , 4F
不過我用Matlab都是在做數值計算...所以很少用到空矩陣
12/01 01:37, 4F

12/01 09:32, , 5F
對於一些真的無法預估大小的,也只好先用[]宣告
12/01 09:32, 5F

12/01 09:32, , 6F
否則你無法在迴圈內使用
12/01 09:32, 6F

12/01 11:07, , 7F
對呴,一定是為了在迴圈用,一時沒想到
12/01 11:07, 7F

12/01 22:33, , 8F
感謝!觀念釐清!
12/01 22:33, 8F

12/02 11:36, , 9F
寫的真好,觀念頓時明朗起來,讚~~
12/02 11:36, 9F
文章代碼(AID): #13ZQOh7H (MATLAB)
文章代碼(AID): #13ZQOh7H (MATLAB)