全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
4433 4
2020-11-19
请问各位大神R中什么函数可以遍历矩阵的每一个元素并按条件运算?例如我有一个5000*3000的矩阵,要遍历每一个元素,如果元素大于100就把这个元素乘10,如果在0和100之间将这个元素加50,小于0的话变成这个元素的负数。之后将这个结果输出为同样大小5000*3000的新矩阵。我之前用了两个for循环嵌套一起来完成,但是运算速度非常慢,求教有没有什么好用的方法?
二维码

扫码加我 拉你入群

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

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

全部回复
2020-11-19 21:44:15
这样会快一点
set.seed(10)
A <- matrix(round(rnorm(5000*3000,100),1),5000,3000)
afun <- function(x){
        if(x > 100){
                y = 100*x
        }else if(x < 0){
                y = -x
        }else{
                y = x + 50
        }
}
apply(A,c(1,2),afun)

二维码

扫码加我 拉你入群

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

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

2020-11-19 22:44:43
set.seed(10)
A <- matrix(round(rnorm(5000*3000,100),1),5000,3000)

afun <- function(x){
        if(x > 100){
                y = 100*x
        }else if(x < 0){
                y = -x
        }else{
                y = x + 50
        }
        return(y)
}

cfun <- function(x){
        id1 = x>100
        id2 = x<0
        id3 = (x>=0 & x<= 100)
        x[id1] = x[id1]*100
        x[id2] = -x[id2]
        x[id3] = x[id3] + 50
        return(x)
}


system.time((ha = apply(A,c(1,2),afun)))

system.time((hc = apply(A,2,cfun)))

> system.time((ha = apply(A,c(1,2),afun)))
用户  系统  流逝
33.62  0.39 34.05
>
> system.time((hc = apply(A,2,cfun)))
用户 系统 流逝
0.69 0.00 0.69

在你这种情况,第二种方法会快得多
二维码

扫码加我 拉你入群

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

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

2020-11-20 06:00:23
直接操作就好了,不用循环,给你个例子

复制代码
二维码

扫码加我 拉你入群

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

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

2020-11-20 09:21:22
owenqi 发表于 2020-11-20 06:00
直接操作就好了,不用循环,给你个例子
学到了!非常感谢!
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群