楼主: rockfido
2603 18

[有偿编程] 求教大拿R data.table运算速度问题! [推广有奖]

11
rockfido 在职认证  发表于 2017-8-22 21:56:05 来自手机
calanthia 发表于 2017-8-22 03:32
试试用`set`替代`:=`

或者使用`.SD`
试过了,用set会更慢点。。。还是很谢谢你的建议!

12
rockfido 在职认证  发表于 2017-8-22 21:56:52 来自手机
deem 发表于 2017-8-22 08:06
写成向量和矩阵相乘的形式会改善吗?你的数据有没有大量的0-1变量?
这个可以试试,然后来汇报。我就担心建立这第二个矩阵会花挺多时间的,我试试!谢谢!

13
rockfido 在职认证  发表于 2017-8-22 22:00:52 来自手机
cheetahfly 发表于 2017-8-22 16:40
先问清楚一下:“100mm的record”是指100兆兆(100万亿)的记录吗?还是仅仅是100M(1亿)条记录?
还有, ...
就是100m,是商业工作中的用途。以前所有的scoring engine都是sas写的,现在要转到open source,然后因为model developer选择了r data table,所以我们做scoring为了consistent也选择了r data table,现在计算速度是个问题。大头们都觉得能实现几分钟内就全部完成的想法,可我现在测试到的,至少需要2-3小时。。所以现在在一步步看到底哪里可以改进,一个是这个步骤花时间多,还有一个是data merge花时间多。

14
calanthia 发表于 2017-8-23 00:23:32
如果不局限用`data.table`, 可以考虑纯数值的矩阵计算 - 因为单一类型数据以`data.table`的形式存储没有优势。并且考虑底层运算改写成`Fortran`或`C`再接入`R`。

15
cheetahfly 在职认证  发表于 2017-8-23 08:09:32
对于以列为单位的计算,确实矩阵运算要更快一些,更何况内存足够大,但要达到你的目标还需要想想其他办法,能够用GPU不?

16
rockfido 在职认证  发表于 2017-8-25 08:59:37 来自手机
deem 发表于 2017-8-22 08:06
写成向量和矩阵相乘的形式会改善吗?你的数据有没有大量的0-1变量?
试了这个方法,总的时间差不多,如果算上先建立矩阵,还会更慢一点。。。

17
rockfido 在职认证  发表于 2017-8-25 09:00:48 来自手机
cheetahfly 发表于 2017-8-23 08:09
对于以列为单位的计算,确实矩阵运算要更快一些,更何况内存足够大,但要达到你的目标还需要想想其他办法, ...
啥是GPU?并行么?实在不行,就只能跟老板说并行上了,其实在cloud上有100个core可以用的

18
rockfido 在职认证  发表于 2017-8-25 09:01:52 来自手机
calanthia 发表于 2017-8-23 00:23
如果不局限用`data.table`, 可以考虑纯数值的矩阵计算 - 因为单一类型数据以`data.table`的形式存储没有优 ...
也考虑过c的方案,后来还是被老板否决了,老板就是觉得r data table就能解决。。。

19
cheetahfly 在职认证  发表于 2017-8-27 21:11:46
GPU是图形处理器,也就是显卡芯片,并行处理能力和CPU不是一个量级的,R有专门的package用GPU并行处理marix的计算。不过你这么问,估计也不会考虑这个思路。
你安装加载"Matrix"包,将原来的data.table数据类型用as(data, "dgCMatrix")改为这个包支持的类型,然后用%*%来矩阵计算,我测算过,大概快50%左右,可以节省一半的时间。
你先试试看效果如何
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 09:47