<DIV class=quote><B>以下是引用<I>Genial</I>在2004-8-8 15:41:39的发言:</B><br>
<>我用find等函数矢量化了一下,但是测试结果发现效率更低了</P>
<>主要问题就出在find这个函数上了</P>
<>感觉这个函数可能matlab中没有写好</P>
<P>function results = myfun(Nums)<br>NumsBck = Nums;<br>Counts=zeros(size(Nums)); % preallocate array<br>index = find(Nums>1);<br>while (~isempty(index))<br> indexodd = find(rem(Nums,2)&(Nums>1));<br> Nums(indexodd) = (3*Nums(indexodd)+1)/2;<br> Counts(indexodd) = Counts(indexodd)+1;<br> indexeven = find(~rem(Nums,2));<br> Nums(indexeven) = Nums(indexeven)/2;<br> Counts(indexeven) = Counts(indexeven)+1;<br> index = find(Nums>1);<br>end<br>results=[NumsBck' Counts'];</P>
<P><B>6</B> indexodd = find(rem(Nums,2)&(Nums>1)); 占了将近整个程序运行的40%的时间<br></P>
<P><B>10</B> Nums(indexeven) = Nums(indexeven)/2;不明白为什么这句也占了整个程序运行时间的20% </P>
<P><br><br></P></DIV>
<P>连续对同样的向量使用find,效率必然很低。因为每次 find 都会遍历向量中的每一个元素。 用find和不用的差距太大了~~真不知什么是所谓的向量化?</P>
[此贴子已经被作者于2005-7-25 18:20:49编辑过]
|