R 如何将矩阵的每个值除以该矩阵各列总和的平方根?
如何将原始矩阵中该列的每个原始值除以原始值平方和的平方根R 如何将矩阵的每个值除以该矩阵各列总和的平方根?,r,R,如何将原始矩阵中该列的每个原始值除以原始值平方和的平方根 data(longley) X <- as.matrix(longley[,-7]) X/sqrt(colSums(X^2)) 数据(朗利) 这有用吗 data(longley) X <- as.matrix(longley[,-7]) X <- apply(X, 2 , function(x) x/sqrt(sum(x^2))) 数据(朗利) 试试这个: t(t(X)/sqrt(colSums(X^2)))
data(longley)
X <- as.matrix(longley[,-7])
X/sqrt(colSums(X^2))
数据(朗利)
这有用吗
data(longley)
X <- as.matrix(longley[,-7])
X <- apply(X, 2 , function(x) x/sqrt(sum(x^2)))
数据(朗利)
试试这个:
t(t(X)/sqrt(colSums(X^2)))
基准:
library(microbenchmark)
microbenchmark(t(t(X)/sqrt(colSums(X^2))),
apply(X, 2 , function(x) x/sqrt(sum(x^2))))
# Unit: microseconds
# expr min lq median uq max neval
# t(t(X)/sqrt(colSums(X^2))) 28.783 33.1305 34.9455 40.5640 68.147 100
# apply(X, 2, function(x) x/sqrt(sum(x^2))) 100.307 105.1940 106.9975 108.1075 193.015 100
请详细说明结果的错误。sqrt(colSums(X^2))
很好(比apply
快得多),但在执行X/…
时,sqrt(colSums(X^2))
的结果会在列中循环使用,因此会得到“错误的结果”。匿名函数中有一个输入错误。总数中应该是小写的x。谢谢。这里有一个简单的输入错误X,它更快,它也给出了在代数中如何执行这些操作的想法。正如预期的那样colSums
vsapply(X,2,sum)
已知速度更快。(无论如何,已经投了赞成票)