缩放标准化或加权

时间:2018-05-30 23:12:16

标签: r cumsum

我希望我能在这里找到这个问题的答案。我有这段代码,我试图仔细分析,

alphas <- matrix(runif(900), ncol=3, byrow=TRUE)
z <- t(apply(alphas, 1, cumsum)) 

for(i in 1:nrow(z)){
  z[i, ] <- z[i, ] / (1:ncol(z))
}

我试图理解z[i,]<- z[i,]/(1:ncol(z))代码对矩阵alpha的作用。我知道我们将每列按输入矩阵中的列序列分开。我也知道当使用带有边距2的应用时,我们应用我们感兴趣的函数,在这种情况下,“cumsum”在矩阵alpha的行上。这基本上就是我所知道的,我不知道为什么下一行以及我的矩阵alphas会怎么做?

我会感激一些遗嘱 非常感谢你

1 个答案:

答案 0 :(得分:1)

使用您的代码我会说您正在计算alphas行累计均值

使用循环中的行,您正在进行向量除法,得出每列累积和的平均值。

查看ncol(z)产生的结果

> ncol(z)
[1] 3

所以基本上你在循环中用z[i, ] / (1:ncol(z))做的事情是每行分别用一个向量或序列,用列号的长度来表示,即c(1, 2, 3)或只是{{1 }}

考虑1:3alphas的第一行。

z

循环的核心产生

set.seed(42)  # for sake of reproducibility

alphas <- matrix(runif(900), ncol=3, byrow=TRUE)
z <- t(apply(alphas, 1, cumsum)) 

> alphas[1, ]
[1] 0.9148060 0.9370754 0.2861395

> z[1, ]
[1] 0.914806 1.851881 2.138021

> cbind(alphas[1, 1], mean(c(alphas[1, 1:2])), mean(c(alphas[1, 1:3])))
         [,1]      [,2]      [,3]
[1,] 0.914806 0.9259407 0.7126737

因此,> z[1, ] / 1:ncol(z) [1] 0.9148060 0.9259407 0.7126737 行的每个元素将被其对应的向量除数除以,得到聚合单元格的均值。 你的循环只是为整个z[1, ]矩阵做了这个。

Apropos-在 R 中更快更方便我们在函数内以矢量化方式执行此操作。由于您了解z,因此您将了解apply()。我们将首先定义一个函数。

sapply()

这会产生与循环相同的效果,但是采用 R 方式。

我们可以用一步来说明

FUN1 <- function(i){
  z[i, ] / 1:ncol(z)
}

M <- t(sapply(1:nrow(z), FUN1))

> head(M, 3)
          [,1]      [,2]      [,3]
[1,] 0.9148060 0.9259407 0.7126737
[2,] 0.8304476 0.7360966 0.6637630
[3,] 0.7365883 0.4356275 0.5094157