【发布时间】:2012-07-08 04:08:22
【问题描述】:
我在 R 中有一个 N x K 矩阵,其中每一行是一个观察值,每一列是一个具有固定下限和上限的变量。
我的矩阵最初设置为 0 到 1 之间的值。反规范化此矩阵的最佳方法是什么?我正在使用以下功能:
denormalizeMult = function(m, lb, ub)
{
nobs = nrow(m)
nvars = ncol(m)
lbDiag = diag(lb, ncol = nvars)
rangeM = diag(ub - lb, ncol = nvars)
m%*%rangeM + matrix(rep(lb, nobs), nrow = nobs, byrow = TRUE)
}
# Example:
# 3 variables, 9 observations
x = matrix(runif(3*9), ncol = 3)
# to denormalize a variable xi, just do lb[i] + (ub[i] - lb[i])*xi
# ranges for each variable
lb = c(-1,-2,-3)
ub = c(1,2,3)
第一个变量的范围是 -1 到 1,第二个变量的范围是 -2 到 2,依此类推... 另一种解决方案是:
denormalize2 = function(population)
{
r = nrow(population)
c = ncol(population)
decm = matrix(rep(0, r*c), r, c)
for(i in 1:r)
decm[i,] = lb + (ub - lb) * population[i,]
decm
}
有没有一种简单(更快)的方法来实现这一点? 谢谢!
编辑:以下答案的结果:
【问题讨论】:
-
请提供最小示例数据集,包括
m、lb和ub。如果没有,我只是建议你看看?sweep。 -
谢谢,我已经编辑了问题。
-
我觉得您填写
lbM和rangeM的方式有问题。您应该使用rep(..., each = nobs)还是matrix(..., byrow = TRUE)? -
不管怎样,这个功能不起作用...我重新编辑了它,谢谢!
标签: r matrix vectorization denormalized