楼主: tjxxukai
12361 14

[问答] R软件如何不使用循环而实现数组赋值 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

81%

还不是VIP/贵宾

-

威望
0
论坛币
375 个
通用积分
32.0848
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
29074 点
帖子
159
精华
0
在线时间
43 小时
注册时间
2013-6-20
最后登录
2024-2-27

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
n=200
A=array(0,dim=c(n,n,n))
for(i in 1:n)
for(j in 1:n)
for(k in 1:n)
A[i,j,k]=sin(i+j+k)+i*j*k-i
A
这是可以在R中运行的代码,由于n=200时数组太大导致运行时间太长。请问各位老师上述数组赋值不使用循环怎么实现。

二维码

扫码加我 拉你入群

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

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

关键词:r软件 不使用 array 运行时间 For 如何 软件

回帖推荐

十里春风 发表于5楼  查看完整内容

fun

万人往LVR 发表于2楼  查看完整内容

n
沙发
万人往LVR 在职认证  发表于 2015-7-19 12:24:44 |只看作者 |坛友微信交流群
n <- 200
x <- rep(1:n,each=n^2);
y <- rep(rep(1:n,each=n),times=n);
z <- rep(1:n,times=n^2);
data <- cbind(x,y,z)   ##建立(1,1,1),(1,1,2)...(1,200,200), ...(200,200,200)的数组
f <- function(x) {sin(x[1]+x[2]+x[3])+x[1]*x[2]*x[3]-x[1]}
results <- apply(data,1,f)  

n=100时候是19s,n=200时候我的R会自动退出,你看看能用不
results是向量的格式,具体怎么对应你自己来吧
已有 1 人评分论坛币 学术水平 热心指数 收起 理由
admin_kefu + 25 + 1 + 1 热心帮助其他会员

总评分: 论坛币 + 25  学术水平 + 1  热心指数 + 1   查看全部评分

使用道具

藤椅
tjxxukai 发表于 2015-7-19 13:27:31 |只看作者 |坛友微信交流群
万人往LVR 发表于 2015-7-19 12:24
n
你的想法很好,请问你的计算机是台式机,还是笔记本呢,因为我用你的方法感觉时间不止19秒呢。

使用道具

板凳
ryoeng 在职认证  发表于 2015-7-19 13:29:02 |只看作者 |坛友微信交流群
提示: 作者被禁止或删除 内容自动屏蔽

使用道具

报纸
十里春风 学生认证  发表于 2015-7-19 22:34:44 |只看作者 |坛友微信交流群
fun<-function(n){
  A=array(0,dim=c(n,n,n))
  N=1:n
  dat=expand.grid(N,N,N)
  dat=as.matrix(dat)
  A[dat]=sin(rowSums(dat))+dat[,1]*dat[,2]*dat[,3]-dat[,1]
  A
}
system.time(fun(200))
##用户 系统 流逝
##3.64 0.40 4.68

已有 1 人评分论坛币 学术水平 收起 理由
admin_kefu + 10 + 1 热心帮助其他会员

总评分: 论坛币 + 10  学术水平 + 1   查看全部评分

使用道具

地板
万人往LVR 在职认证  发表于 2015-7-20 10:00:11 |只看作者 |坛友微信交流群
tjxxukai 发表于 2015-7-19 13:27
你的想法很好,请问你的计算机是台式机,还是笔记本呢,因为我用你的方法感觉时间不止19秒呢。
笔记本,n=100时候是19s,n=200我的R直接崩溃了

使用道具

7
tjxxukai 发表于 2015-7-20 12:23:49 |只看作者 |坛友微信交流群
万人往LVR 发表于 2015-7-20 10:00
笔记本,n=100时候是19s,n=200我的R直接崩溃了
谢谢,感谢

使用道具

8
tjxxukai 发表于 2015-7-20 12:24:24 |只看作者 |坛友微信交流群
ryoeng 发表于 2015-7-19 13:29
如果数据太大,还可以使用 ff 包嚄!
多谢,thanks

使用道具

9
tjxxukai 发表于 2015-7-20 12:26:45 |只看作者 |坛友微信交流群
十里春风 发表于 2015-7-19 22:34
fun
非常感谢,有用

使用道具

10
ntsean 发表于 2015-7-21 00:43:52 |只看作者 |坛友微信交流群
  1. f <- function(n) {
  2.   n <- n - 1
  3.   k <- floor(n / 200^2) + 1
  4.   n <- n %% 200^2
  5.   j <- floor(n / 200) + 1
  6.   i <- n %% 200 + 1
  7.   sin(i + j + k) + i*j*k - i
  8. }

  9. system.time(a <- array(f(1:200^3), c(200, 200, 200)))

  10.    user  system elapsed
  11.   0.561   0.026   0.588
复制代码

使用道具

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

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

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

GMT+8, 2024-5-14 18:32