作者pipidog (如果狗狗飛上天)
看板MATLAB
標題Re: [問題] 請問矩陣執行速度的問題
時間Wed Nov 30 21:24:06 2005
※ 引述《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
1F:推 Ysen:超明白,可以給個M嗎? 11/30 23:16
2F:推 dok:請問如果在for前用 a=[]有何好處(我有看到一些範例是這樣用的) 12/01 01:16
3F:→ pipidog:空矩陣好像是用在字串吧! 要字串資料結構的空間 12/01 01:36
4F:→ pipidog:不過我用Matlab都是在做數值計算...所以很少用到空矩陣 12/01 01:37
5F:推 jimpeng:對於一些真的無法預估大小的,也只好先用[]宣告 12/01 09:32
6F:→ jimpeng:否則你無法在迴圈內使用 12/01 09:32
7F:推 dok:對呴,一定是為了在迴圈用,一時沒想到 12/01 11:07
8F:推 feignaz:感謝!觀念釐清! 12/01 22:33
9F:推 qqqqqq:寫的真好,觀念頓時明朗起來,讚~~ 12/02 11:36