【发布时间】:2015-04-18 03:47:49
【问题描述】:
我想找出获得矩阵中包含的一组向量的范数的最快方法。我使用的是apply(这是一个例子,我的矩阵要大得多):
a = matrix(1:9, 3,3)
norm_a = apply(a, 1, function(x) sqrt(sum(x^2)))
但后来我想加快我的代码并移至:
norm_a = sqrt(a^2%*%rep(1,dim(a)[2]))
这实际上要快得多(参见system.time,我不是基准测试专家)。但到目前为止,我还没有找到这个问题的任何最终答案。有人对此有见解吗?
谢谢
【问题讨论】:
-
使用
norm函数怎么样? -
norm是计算矩阵的范数,而不是一组向量的(欧几里得)范数。我可以将它与apply和type = "F"一起使用,但这似乎与我第一次尝试使用sqrt(sum(x^2))时几乎相同 -
我的意思是
apply(a,1,norm,"2")(不一定更快,只是代码更简洁) -
根据
300x300矩阵,从3 种可能性中,您的第二个选项是最快的,然后是第一个选项,然后是norm选项(来自microbenchmark函数的结果,来自@ 987654334@包)
标签: r matrix benchmarking normalization