我在R中有一个矩阵,如下所示:
|1|2|3|
|1|2|3|
|1|2|3|
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以将整个矩阵顺时针旋转90度以获得这些结果?
|1|1|1|
|2|2|2|
|3|3|3|
Run Code Online (Sandbox Code Playgroud)
并再次旋转90度:
|3|2|1|
|3|2|1|
|3|2|1|
Run Code Online (Sandbox Code Playgroud)
?
我正在查看这个答案中的基准,并希望将它们与diag
(用于不同的答案)进行比较.不幸的是,似乎diag
需要很长时间:
nc <- 1e4
set.seed(1)
m <- matrix(sample(letters,nc^2,replace=TRUE), ncol = nc)
microbenchmark(
diag = diag(m),
cond = m[row(m)==col(m)],
vec = m[(1:nc-1L)*nc+1:nc],
mat = m[cbind(1:nc,1:nc)],
times=10)
Run Code Online (Sandbox Code Playgroud)
评论:我测试了这些identical
.我从这个家庭作业问题的答案中选了一个"cond" .结果类似于整数矩阵,1:26
而不是letters
.
结果:
Unit: microseconds
expr min lq mean median uq max neval
diag 604343.469 629819.260 710371.3320 706842.3890 793144.019 837115.504 10
cond 3862039.512 3985784.025 4175724.0390 4186317.5260 4312493.742 4617117.706 10
vec 317.088 329.017 432.9099 350.1005 629.460 651.376 10
mat 272.147 …
Run Code Online (Sandbox Code Playgroud) 有没有办法diag()
在不使用内置函数或迭代的情况下在Matrix中使用该函数?
M<-matrix(1:9, ncol=3) # make a matrix
q5b<-function(M){ #function
}
Run Code Online (Sandbox Code Playgroud)
我知道M[1,1]
,M[2,2]
和M[3,3]
给我的输出相同diag(M)
.但是,如果没有for循环,我无法想到这样做的方法.
我的思维过程是我应该有一个条件,row index == column index
然后矩阵然后打印该值.我很感激任何建议.