作者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