R中矩阵的正规化

R中矩阵的正规化,r,linear-algebra,R,Linear Algebra,如何按列规范化/缩放R中的矩阵。例如,当我计算矩阵的特征向量时,R返回: > eigen(matrix(c(2,-2,-2,5),2,2))$vectors [,1] [,2] [1,] -0.4472136 -0.8944272 [2,] 0.8944272 -0.4472136 // should be normalized to [,1] [,2] [1,] -1 -2 [2,] 2 -1 函数“scale”减去平均值,然后

如何按列规范化/缩放R中的矩阵。例如,当我计算矩阵的特征向量时,R返回:

> eigen(matrix(c(2,-2,-2,5),2,2))$vectors
       [,1]       [,2]
[1,] -0.4472136 -0.8944272
[2,]  0.8944272 -0.4472136

// should be normalized to
     [,1] [,2]
[1,]   -1   -2
[2,]    2   -1

函数“scale”减去平均值,然后除以标准偏差,再除以列,这在这种情况下没有帮助。如何实现这一点?

这将生成您想要的矩阵:

> a <- eigen(matrix(c(2,-2,-2,5),2,2))$vectors
> a / min(abs(a))
     [,1] [,2]
[1,]   -1   -2
[2,]    2   -1
>a a/min(abs(a))
[,1] [,2]
[1,]   -1   -2
[2,]    2   -1

但我不确定我是否完全理解您想要什么,因此这通常可能不会做正确的事情。

这会生成您想要的矩阵:

> a <- eigen(matrix(c(2,-2,-2,5),2,2))$vectors
> a / min(abs(a))
     [,1] [,2]
[1,]   -1   -2
[2,]    2   -1
>a a/min(abs(a))
[,1] [,2]
[1,]   -1   -2
[2,]    2   -1

但我不确定我是否完全理解您的要求,因此这通常可能不正确。

Wolfram Alpha给出了以下结果:

{2,-2},{-2,5}

输入:

特征值:

特征向量:

我不确定你说的是平均值和标准差。一个好的迭代方法,比如QR,应该可以得到你需要的特征值和特征向量。退房或户主

通过将每个分量除以其分量平方和的平方根,可以对任何向量进行规格化。单位向量的大小等于1


在您的例子中,这是正确的:由R表示的向量已被规范化。如果你规范化两个Wolfram特征向量,你会发现它们的幅值都等于5的平方根。将每个列向量除以该值,得到的列向量为R。两者都是正确的。

Wolfram Alpha给出以下结果:

{2,-2},{-2,5}

输入:

特征值:

特征向量:

我不确定你说的是平均值和标准差。一个好的迭代方法,比如QR,应该可以得到你需要的特征值和特征向量。退房或户主

通过将每个分量除以其分量平方和的平方根,可以对任何向量进行规格化。单位向量的大小等于1


在您的例子中,这是正确的:由R表示的向量已被规范化。如果你规范化两个Wolfram特征向量,你会发现它们的幅值都等于5的平方根。将每个列向量除以该值,您将得到由R给出的列向量。两者都是正确的。

这并没有特别的帮助,因为OP已经计算了特征向量(这就是
eigen()
所做的),但它们是非标准化的(可能是因为底层的LAPACK例程不需要对它们进行标准化)。我并不完全理解OP希望他们的特征向量是如何标准化的。将所有分量除以0.4472136,你就会得到你想要的值。我认为指出算法的名称是很有帮助的,因为您应该知道eigen()方法的背后是什么。知道scale()所做的工作的描述是不正确的也是一件好事。特征向量规范化不是这样做的。这并不是特别有用,因为OP已经计算了特征向量(这就是
eigen()
所做的),但它们没有得到规范化(可能是因为底层的LAPACK例程没有对它们进行规范化)。我并不完全理解OP希望他们的特征向量是如何标准化的。将所有分量除以0.4472136,你就会得到你想要的值。我认为指出算法的名称是很有帮助的,因为您应该知道eigen()方法的背后是什么。知道scale()所做的工作的描述是不正确的也是一件好事。特征向量归一化不是这样做的。