我在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