gpt4 book ai didi

r - 我应该在 R 中使用 crossprod 或基函数来计算两个向量距离的平方范数吗?

转载 作者:行者123 更新时间:2023-11-30 08:42:08 24 4
gpt4 key购买 nike

我在很多地方(例如 in the rbfdot function herehere )看到人们使用以下公式计算两个向量距离的平方范数

norm

R编程语言中,这变成了

crossprod(x) - 2*crossprod(x, y) + crossprod(y)

在上面的链接以及许多其他地方,人们完全使用上面的r公式来计算两个向量距离的平方范数。但是,我尝试将其与简单地对条目进行平方并求和进行基准测试,即

sum( (x-y)^2 )

在我看来,基础 R 版本更快:

# Create reproducible vectors
set.seed(123)
n <- 10^7
x <- rnorm(n)
y <- rnorm(n)
system.time(crossprod(x) - 2*crossprod(x, y) + crossprod(y))
# user system elapsed
# 0.054 0.000 0.054
system.time(sum( (x-y)^2 ))
# user system elapsed
# 0.027 0.024 0.051

我错过了什么?

我想知道哪个选项更快,因为我正在尝试编写代码来使用 RBF 函数获取内核矩阵。

最佳答案

crossprod() 是一个很棒的函数,它的存在相当隐蔽,应该被更多地使用。要比较计算时间,您应该使用一个可以让您更精确地进行计算的包。

我们可以使用microbenchmark包来比较计算时间:

set.seed(123)
n <- 10^8
x <- rnorm(n)
y <- rnorm(n)
microbenchmark::microbenchmark(crossprod(x) - 2*crossprod(x, y) + crossprod(y),
crossprod(x-y),
sum((x-y)^2))


Unit: milliseconds
expr min lq mean median uq max neval cld
crossprod(x) - 2 * crossprod(x, y) + crossprod(y) 470.7079 491.7889 537.0879 502.9029 525.2929 1392.929 100 a
crossprod(x - y) 533.9799 575.4948 870.1463 588.7248 615.8091 4524.261 100 b
sum((x - y)^2) 542.8631 589.2234 1087.4885 610.5433 1220.1261 5423.189 100 b

关于r - 我应该在 R 中使用 crossprod 或基函数来计算两个向量距离的平方范数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58939606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com