Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何将矩阵的每个值除以该矩阵各列总和的平方根?_R - Fatal编程技术网

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
vs
apply(X,2,sum)
已知速度更快。(无论如何,已经投了赞成票)