我在R中有一个N×K的矩阵,其中每行都是一个观察值,每列是一个具有固定下限和上限的变量。R中的非规范化矩阵
我的矩阵初始设置值介于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'。 – 2012-07-08 04:30:38
谢谢,我编辑了这个问题。 – Fernando 2012-07-08 05:11:21
我觉得你填写'lbM'和'rangeM'的方式有问题。你应该使用'rep(...,each = nobs)'还是'matrix(...,byrow = TRUE)'? – flodel 2012-07-08 05:20:51