【问题标题】:Matrix manipulation issues - colMeans矩阵操作问题 - colMeans
【发布时间】:2014-03-28 08:49:46
【问题描述】:

我在 R 中做了一些非常简单的事情,但我发现了这个我无法弄清楚的问题。 我正在对矩阵中保存的一些变量进行标准化,发现结果并没有给出我认为应该的结果。我写了一个小例子:

t = matrix(1:9, nrow = 3) ## data
t
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

现在我的问题是,为什么下面的代码没有给出相同的答案?

t[1,] - colMeans(t)
[1] -1 -1 -1

(t - colMeans(t))[1,]
[1] -1  2  5

正确答案是前者,但是我想知道是否有人可以向我解释为什么会发生后者?

如果有人可以建议一种方法来做前者而不需要任何循环(这就是我尝试后者的原因),那将不胜感激。

谢谢,

山姆

编辑

(将 t 矩阵更改为 x 以消除混淆)

t(t(x) - colMeans(x)) 

给出我想要的答案。这是唯一的方法吗?转换的数量似乎过多。

【问题讨论】:

  • 您是否分别查看了colMeans(t)t[1,](t - colMeans(t))?那里有很多信息。
  • 是的。手段是更少的列,而不是行(这是我想要的)。我试过 (t - t(colMeans(t))) 但没有解决问题。

标签: r matrix


【解决方案1】:

您需要所有这些转置来对向量/矩阵进行正确的运算,或者您可以根据列的平均值构造一个矩阵:

> means.mat = matrix(colMeans(x),nrow=nrow(x),ncol=ncol(x),byrow=T)
> means.mat
     [,1] [,2] [,3]
[1,]    2    5    8
[2,]    2    5    8
[3,]    2    5    8
> x-means.mat
     [,1] [,2] [,3]
[1,]   -1   -1   -1
[2,]    0    0    0
[3,]    1    1    1

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    相关资源
    最近更新 更多