楼主: bobguy
1070 0

[原创博文] vectorize operation in IML [推广有奖]

学科带头人

7%

还不是VIP/贵宾

-

威望
0
论坛币
14187 个
通用积分
28.9279
学术水平
344 点
热心指数
363 点
信用等级
228 点
经验
104882 点
帖子
1846
精华
0
在线时间
1608 小时
注册时间
2008-7-18
最后登录
2019-3-8

中级热心勋章

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
One of the useful tip in IML programming is to vectorize operation in IML.  It is ineifficient to do the matrix operation in element level ( loop through the index). As shoed in the following example that vectorizing operation beates element operation about 5 times in cpu time.

177  %let n=500000;
178
179  proc iml;
NOTE: IML Ready
180
181    call randseed(20);
182    x=j(&n,1,.);
183    e=j(%eval(&n+1),1,.);
184    e1=x;
185    call randgen(x, 'uniform');
186    call randgen(e, 'normal');
187    idx=2:%eval(&n+1);
188    idx2=1:&n;
189    e0=e(|idx|);
190    e=e(|idx2|);
191    y=1+2*x+0.7*e+e0;
192    *print e e0 x y;
193    quit;
NOTE: Exiting IML.
NOTE: 6 workspace compresses.
NOTE: PROCEDURE IML used (Total process time):
      real time           0.13 seconds
      cpu time            0.12 seconds


194
195
196  proc iml;
NOTE: IML Ready
197
198    call randseed(20);
199    x=j(&n,1,.);
200    y=j(&n,1,.);
201    e=j(%eval(&n+1),1,.);
202    e1=x;
203    call randgen(x, 'uniform');
204    call randgen(e, 'normal');
205    do i=1 to &n;
206      y=1+2*x+0.7*e+e[i+1];
207    end;
208    *print e  x y;
209    quit;
NOTE: Exiting IML.
NOTE: 187 workspace compresses.
NOTE: PROCEDURE IML used (Total process time):
      real time           0.56 seconds
      cpu time            0.56 seconds
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:operation ration Vector ATION Opera

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 13:42