为什么对两个相同的矩阵行进行幂运算会产生不同的值?

时间:2018-09-01 01:35:08

标签: r

示例:

> 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

我想念什么?

2 个答案:

答案 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)