精華區beta MATLAB 關於我們 聯絡資訊
※ 引述《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
Ysen:超明白,可以給個M嗎? 11/30 23:16
dok:請問如果在for前用 a=[]有何好處(我有看到一些範例是這樣用的) 12/01 01:16
pipidog:空矩陣好像是用在字串吧! 要字串資料結構的空間 12/01 01:36
pipidog:不過我用Matlab都是在做數值計算...所以很少用到空矩陣 12/01 01:37
jimpeng:對於一些真的無法預估大小的,也只好先用[]宣告 12/01 09:32
jimpeng:否則你無法在迴圈內使用 12/01 09:32
dok:對呴,一定是為了在迴圈用,一時沒想到 12/01 11:07
feignaz:感謝!觀念釐清! 12/01 22:33