示例:
> m <- matrix(c(1,2,3,4,5,1,2,3,4,5), nrow=2, byrow=T)
> m ** c(.1, .1, .1, .3, .4)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1.071773 1.551846 1.148698 1.620657
[2,] 1 1.231144 1.116123 1.148698 1.903654
我想念什么?
答案 0 :(得分:2)
我认为你是这个意思吗?
t(t(m) ^ c(.1, .1, .1, .3, .4))
#[,1] [,2] [,3] [,4] [,5]
#[1,] 1 1.071773 1.116123 1.515717 1.903654
#[2,] 1 1.071773 1.116123 1.515717 1.903654
其中t(m)
返回matrix
m
的转置。
您陷入了“回收陷阱”,其中R自动(隐式地)回收值以在矢量化操作(此处为幂运算)中适当匹配矢量的尺寸。本质上,您在做什么
as.numeric(m)^c(.1, .1, .1, .3, .4)
这样写,很清楚R如何循环向量c(.1, .1, .1, .3, .4)
以匹配向量as.numeric(m)
的长度。以matrix
重铸会重现您的原始结果。
matrix(as.numeric(m)^c(.1, .1, .1, .3, .4), nrow = 2)
# [,1] [,2] [,3] [,4] [,5]
#[1,] 1 1.071773 1.551846 1.148698 1.620657
#[2,] 1 1.231144 1.116123 1.148698 1.903654
答案 1 :(得分:1)
m <- matrix(c(1,2,3,4,5,1,2,3,4,5), nrow=2, byrow=T)
expnt <- c(.1, .1, .1, .3, .4)
# option 1
m ^ rbind(expnt, expnt)
# option 2
m ^ matrix(rep(expnt, each=2), nrow=2)
# more generalized (any number of rows) version of option 2
nr <- nrow(m)
m ^ matrix(rep(expnt, each=nr), nrow=nr)