R中更有效的矩阵运算
我试图计算R中两个离散概率分布的卷积。我有两个向量,每个向量都包含概率。我需要计算第三个向量,它具有前两个向量的组合概率。第三个向量中的第i个位置包含所有j+k=i的概率之和(a[j]*b[k])。 我有以下功能来执行此操作:R中更有效的矩阵运算,r,R,我试图计算R中两个离散概率分布的卷积。我有两个向量,每个向量都包含概率。我需要计算第三个向量,它具有前两个向量的组合概率。第三个向量中的第i个位置包含所有j+k=i的概率之和(a[j]*b[k])。 我有以下功能来执行此操作: convolute <- function(a, b ){ out <- rep(0, (length(a)+741)) for(i in 1:length(a)){ for (j in 1:length(b)){
convolute <- function(a, b ){
out <- rep(0, (length(a)+741))
for(i in 1:length(a)){
for (j in 1:length(b)){
out[i + j] <- out[i+j] + (a[i]*b[j])
}
}
return(out)
}
卷积
与函数相同,只是函数以0开头,而卷积不:
> a <- runif(1000, 0, 1)
> b <- runif(741, 0, 1)
> c1 <- convolute(a, b)
> c2 <- convolve(a, rev(b), type="open")
>
> all.equal(c1[-1], c2)
[1] TRUE
> system.time(c1 <- convolute(a, b))
user system elapsed
4.152 0.000 4.155
> system.time(c2 <- convolve(a, rev(b), type="open"))
user system elapsed
0.000 0.000 0.001
>a b c1 c2
>全部相等(c1[-1],c2)
[1] 真的
>系统时间(c1系统时间(c2
与函数相同,只是函数以0开头,而卷积不:
> a <- runif(1000, 0, 1)
> b <- runif(741, 0, 1)
> c1 <- convolute(a, b)
> c2 <- convolve(a, rev(b), type="open")
>
> all.equal(c1[-1], c2)
[1] TRUE
> system.time(c1 <- convolute(a, b))
user system elapsed
4.152 0.000 4.155
> system.time(c2 <- convolve(a, rev(b), type="open"))
user system elapsed
0.000 0.000 0.001
>a b c1 c2
>全部相等(c1[-1],c2)
[1] 真的
>你能给我们看一些输入数据(a
和b
)和你期望的out
的样子吗?你有没有尝试过卷积
R函数?谢谢。卷积函数可以工作。(输入数据是0-1范围内的概率,因此总和(a)=1),输出也有这个属性)你能给我们看一些输入数据(a
和b
)和你期望的out
的样子吗?你试过卷积
R函数吗?谢谢。卷积函数可以工作。(输入数据是0-1范围内的概率,因此总和(a)=1),输出也有此属性)谢谢。我以前使用过Convalve(用于稍有不同的用途),但它不适用于此,因此我不想在此处使用它。谢谢。我以前使用过Convalve(用于稍有不同的用途),但它不适用于此,因此我不想在此处使用它。