数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
楼主: itmwk

数学工具版"每日一练"----7.6日

[复制链接]
发表于 2005-7-26 01:58:15 | 显示全部楼层
<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&gt;1);<br>while (~isempty(index))<br>    indexodd = find(rem(Nums,2)&amp;(Nums&gt;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&gt;1);<br>end<br>results=[NumsBck' Counts'];</P>
<P><B>6</B>     indexodd = find(rem(Nums,2)&amp;(Nums&gt;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编辑过]

发表于 2005-8-18 15:49:03 | 显示全部楼层
[em07]
发表于 2005-8-26 23:18:41 | 显示全部楼层
<>真长知识!</P>
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-27 15:51 , Processed in 0.048028 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表