gpt4 book ai didi

r - 从R中的两个向量生成这种矩阵的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-03 16:10:17 26 4
gpt4 key购买 nike

u <- rnorm(1000)
v <- c(1,2,3)

A <- matrix(0,nrow=3,ncol=1000)
for (i in 1:3)
{
for (j in 1:1000)
{
A[i,j] <- (u[j]-v[i])^2
}
}
我相信必须有一种更好的方法来从向量 u v 生成矩阵 A 。有人可以帮我吗?

最佳答案

我们可以使用outer:

u <- rnorm(10)
v <- c(1,2,3)

B <- t(outer(u, v, `-`)^2)
identical(A, B)
#[1] TRUE

基准 :
library(microbenchmark)

u <- rnorm(100000)
v <- rnorm(100)

p1 = function(){
A <- matrix(0,nrow=length(v),ncol=length(u))
for (i in 1:length(v))
{
for (j in 1:length(u))
{
A[i,j] <- (u[j]-v[i])^2
}
}
}


p2 = function(){
B <- t(outer(u, v, `-`)^2)
}

microbenchmark(p1(),p2(),times = 10)

#Unit: milliseconds
# expr min lq mean median uq max neval
# p1() 3359.8119 3367.9753 3383.0087 3374.1323 3397.3018 3420.7159 10
# p2() 326.7757 352.0144 459.9654 386.4121 584.3815 694.2599 10

关于r - 从R中的两个向量生成这种矩阵的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64115201/

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