Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sappy和for循环将矩阵的每n行乘以一个数字_R_Matrix_Multiplication - Fatal编程技术网

使用sappy和for循环将矩阵的每n行乘以一个数字

使用sappy和for循环将矩阵的每n行乘以一个数字,r,matrix,multiplication,R,Matrix,Multiplication,我有一个100*100的矩阵,我愿意每十行乘以10。 我知道写下这样的东西很容易做到: tenthrows<-seq(from=10,to=100,by=10) m[tenthrows,]<-m[tenthrows,]*10 然而,我要求通过使用for循环和sappy/lappy函数来实现这一点。 我可以只使用for循环来实现这一点,如: for (i in seq(from = 10 , to = 100, by = 10)) {m[i,]<-m[i,]*10 }

我有一个100*100的矩阵,我愿意每十行乘以10。 我知道写下这样的东西很容易做到:

tenthrows<-seq(from=10,to=100,by=10)  
m[tenthrows,]<-m[tenthrows,]*10
然而,我要求通过使用for循环和sappy/lappy函数来实现这一点。 我可以只使用for循环来实现这一点,如:

for (i in seq(from = 10 , to = 100, by = 10)) {m[i,]<-m[i,]*10 } 
但我不知道如何合并sapply/lapply也这样做,有什么想法吗? 非常感谢您提前生成一个矩阵:

m0 <- m <- matrix(1:1e4,100,100)
这是因为R按列存储矩阵,所以每10个元素相乘等于每10行相乘

另一种可能性:

m3 <- sweep(m0,MARGIN=1,FUN="*",STAT=c(10,rep(1,9)))
all.equal(m,m3)  ## TRUE

rep方法稍微快一点。扫掠(未显示)甚至更慢,尽管它可能是最有原则的方法——它最接近于每10行乘以10的直接转换。同样值得注意的是,即使是最慢的方法也需要0.25秒才能完成1000次复制任务。

哪种编程语言?很抱歉没有提及,但我使用的是R.m*crep1,9,10。谢谢,我尝试过这个方法,但它每十个元素乘以一次,而不是每行。事实上,法哈德,@baptiste的答案应该有效。请参见下文,非常感谢你的帮助。我已经检查了你的代码,它工作得很好。这实际上是我作业的一部分,这就是为什么我需要使用for-loop和sapply/lappy来完成这项工作。提前感谢如果你解释你已经尝试过的,也许有人会帮助你一般来说,人们不喜欢给家庭作业问题的答案,除非他们帮助人们学习,而不仅仅是帮助他们在课程中取得成功亲爱的@Ben Bolker,这就是我到目前为止所想的>>>>>>>因为我在seqfrom=10,to=100,by=10{newmat I,]p、 这不像是一个必须做的作业,我试图自己学习R,因此我试图复制我朋友所学课程的作业。你能编辑你的问题以包含这些信息吗?在这种情况下,想一种使用Lappy/sapply的方法实际上有点有趣/困难/困惑。。。
m2 <- m0 * c(10,rep(1,9))
all.equal(m,m2)  ## TRUE
m3 <- sweep(m0,MARGIN=1,FUN="*",STAT=c(10,rep(1,9)))
all.equal(m,m3)  ## TRUE
library("rbenchmark")
benchmark(m[tenthrows,] <- m[tenthrows,]*10,
          m0*c(10,rep(1,9)),
          sweep(m0,MARGIN=1,FUN="*",STAT=c(10,rep(1,9))),
         replications=1000)
##                                    test replications elapsed relative 
## 2                 m0 * c(10, rep(1, 9))         1000   0.109    1.000 
## 1 m[tenthrows, ] <- m[tenthrows, ] * 10         1000   0.125    1.147