找回密码
 注册
Simdroid-非首页
查看: 194|回复: 4

【讨论】关于随机生成[-1,1]的随机数的方法与效率

[复制链接]
发表于 2010-9-16 10:17:38 | 显示全部楼层 |阅读模式 来自 河北廊坊
本帖最后由 qibbxxt 于 2010-9-16 10:19 编辑

之前在mathworks的官方网站上面看到有人发布一个如何随机生成一个矩阵,矩阵的元素要么是1要么是-1,我就对这个问题思考了一下,写了几种做法,并且从效率的角度判断,得出一些效率方面的结论。
序号表达式 时间
1floor(rand(m,n)*2)*2-10.000202611676683
2fix(rand(m,n)*2)*2-10.000203352632381
3randi([0,1],m,n)*2-10.000270219098047
4round(rand(m,n))*2-10.000281978667666
5randsrc(m,n,[1,-1;0.5,0.5])0.000384587559915
6bsxfun(@power,-1+zeros(m,n),randi([1,2],m,n))0.000600111719102
7for j=1:n
        for k=1:m
            B(k,j)=(-1)^(1-rand<0.5)
        end
    end
0.001048428205005
8accumarray(b,a',[],@(x)round(rand)*2-1)0.045509395803949
9reshape(accumarray(a',a',[],@(x)round(rand)*2-1),m,n)0.045655019833399

我从中得出了一些经验结论(不一定对):

  • 循环不一定是最慢的(小规模的时候)
  • 内置函数由于考虑通用性,不一定最快
  • 简洁和高效有时候是一回事,有时候不是一回事



    附近中是测试的程序

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

发表于 2010-9-16 20:14:52 | 显示全部楼层 来自 四川成都
Simdroid开发平台
其实之前我也做过一些算法(其实当时是做tic toc以及clock等计时器计时的差别的,原本还想写个帖子的)耗时的检验,发现同一段耗时比较短的程序在不同的时候运行时间是不一样的,这种时间的差别有时候竟超过2个数量级。这是由很多因素导致的,但其中一个重要的因素就是计算机不可能在完全相同的条件下做n次重复试验,这可能和计算机指令的解读、运算器等硬件设计有关,必将导致数据离散性很大。所以我觉一种算法的优劣不能靠少量数据来判断,而要靠海量数据来判断,至少要使所涉及的算法平均耗时超过5s以上,这才能显出其优劣性。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-9-17 08:47:48 | 显示全部楼层 来自 河北廊坊
2# lengyunfeng
对,的确是这样的,一方面计算机的稳定性,另外一方面应该用大的数据量进行测试,这样更可靠和有说服力,还有,不同的电脑由于配置不同,也可能导致效率差别,只不过相对来说,也许可以说明一些问题,比如reshape,repmat等的效率是要低一些罢了
回复 不支持

使用道具 举报

发表于 2010-9-17 10:22:39 | 显示全部楼层 来自 北京
repmat和reshape以前效率可能比较低,不过好像在高版本下效率不低了(除去函数第一次调用开销外)

  1. >> tic;ones(5000);toc
  2. Elapsed time is 0.144855 seconds.
  3. >> tic;ones(5000);toc
  4. Elapsed time is 0.152409 seconds.
  5. >> tic;ones(5000);toc
  6. Elapsed time is 0.152686 seconds.
  7. >> clear
  8. >> tic;repmat(1,5000,5000);toc
  9. Elapsed time is 0.726465 seconds.
  10. >> tic;repmat(1,5000,5000);toc
  11. Elapsed time is 0.153706 seconds.
  12. >> tic;repmat(1,5000,5000);toc
  13. Elapsed time is 0.152963 seconds.
复制代码
回复 不支持

使用道具 举报

 楼主| 发表于 2010-9-17 11:30:27 | 显示全部楼层 来自 河北廊坊
4# rocwoods
恩,的确是,matlab现在的速度的却比以前有很大的改进,对一些函数的效率应该重新认识了
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2026-1-8 00:25 , Processed in 0.039723 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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