微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么convolve不可交换?最终结果取决于卷积的顺序

如何解决为什么convolve不可交换?最终结果取决于卷积的顺序

卷积应该是可交换的-操作顺序应该无关紧要。因此,本示例将创建三个beta PDF,然后以三个不同的顺序对它们进行卷积卷积1和3产生相同的最终函数。但是,卷积2会产生不同的最终函数。当然应该一样吗?

# Define beta distribution shape parameters.
s1a <- 3.52; s1b <- 65.35;
s2a <- 1.684; s2b <- 189.12;
s3a <- 5.696; s3b <- 32.34;

# Define quantiles and beta PDFs.
mQ <- matrix(data=seq(0,1,1/1000),ncol=1); # quantiles
mp1 <- matrix(dbeta(mQ,s1a,s1b),ncol=1);
mp2 <- matrix(dbeta(mQ,s2a,s2b),ncol=1);
mp3 <- matrix(dbeta(mQ,s3a,s3b),ncol=1);

# Convolution 1: mp1,mp2,mp3.
mC1 <- matrix(data=convolve(mp1,rev(mp2),type="open"),ncol=1L); # Convolve mp1,mp2 into MC1
mC1 <- matrix(data=mC1[seq(1,nrow(mC1),2),],ncol=1L); # Halve the array to ensure consistency with quantiles.
mC1 <- 2L * mC1; # correct probailities for the halving above.
mC1 <- matrix(data=convolve(mC1,rev(mp3),ncol=1L); # Convolve mC1,mp3
mC1 <- matrix(data=mC1[seq(1,ncol=1L);
mC1 <- 2L * mC1;

# Convolution 2: mp3,mp1,mp2.
mC2 <- matrix(data=convolve(mp3,rev(mp1),ncol=1L); # Convolve mp3,mp2 into mC2
mC2 <- matrix(data=mC2[seq(1,nrow(mC2),ncol=1L);
mC2 <- 2L * mC2;
mC2 <- matrix(data=convolve(mC2,ncol=1L); # Convolve mC2,mp2
mC2 <- matrix(data=mC2[seq(1,ncol=1L);
mC2 <- 2L * mC2;

# Convolution 3: mp2,mp3.
mC3 <- matrix(data=convolve(mp2,ncol=1L); #Convolve mp2,mp1 into mC3
mC3 <- matrix(data=mC3[seq(1,nrow(mC3),ncol=1L);
mC3 <- 2L * mC3;
mC3 <- matrix(data=convolve(mC3,ncol=1L); # Convolve mC3,mp3
mC3 <- matrix(data=mC3[seq(1,ncol=1L);
mC3 <- 2L * mC3

# Plot them up.
maxP <- max(mC1,mC2,mC3);
plot(x=mQ,y=mC1,type="l",col="blue",lwd=2,ylim=c(0,maxP));
lines(x=mQ,y=mC2,col="black",lwd=2);
lines(x=mQ,y=mC3,col="red",lwd=2)

解决方法

对于代码的设置方式,“卷积和子样本”运算符对于不同长度的向量来说是不可交换的。。

cc <- function(x,y) convolve(x,rev(y),type="open")
cch <- function(x,y) cc(x,y)[seq(1,length(x),by=2)]*2

(看起来您可能来自Matlab; R对于将向量适当地视为行/列向量很草率,因此您可以跳过将结果转换回矩阵的所有内容……)

set.seed(101); x <- rnorm(20); y <- rnorm(40)
all.equal(cc(x,y),cc(y,x))   ## TRUE
all.equal(cch(x,cch(y,x))  ## lengths differ

cch(x,y)的结果比z更长,因此我们进行了不等长向量的卷积运算,结果运算符不再进行换向。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。