您可能会在 dsp stack exchange 上得到更好的答案,但是...对于初学者,我发现了许多类似的术语,它们很难确定定义。
- 相关性
- 互相关
- 卷积
- 相关系数
- 滑动点积
- 皮尔逊相关
1、2、3、5非常相似
4,6 相似
请注意,所有这些术语都有点积
您询问了相关性和卷积 - 除了输出在卷积中翻转之外,它们在概念上是相同的。我怀疑您可能一直在询问相关系数(例如 Pearson)和卷积/相关之间的差异。
先决条件
我假设您知道如何计算点积。给定两个大小相等的向量 v 和 w,每个向量都包含三个元素,代数点积为 v[0]*w[0]+v[1]*w[1]+v[2]*w[2]
点积背后有很多关于它所代表的理论......
请注意,点积是一个数字(标量),表示这两个向量/点 v,w 之间的映射。在几何中,经常使用点积计算两个向量之间夹角的余弦值。两个向量之间夹角的余弦值介于 -1 和 1 之间,可以将其视为相似度的度量。
相关系数(皮尔逊)
等长 v,w 之间的相关系数只是两个零均值信号的点积(从 v 中减去均值 v 得到 zmv,从 w 中减去均值 w 得到 zmw - 这里 zm 是零均值的简写)除以zmv 和 zmw 的大小。
产生一个介于 -1 和 1 之间的数字。接近 0 表示相关性小,接近 +/- 1 表示相关性高。它衡量这两个向量之间的相似性。
请参阅http://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient 以获得更好的定义。
卷积和相关
当我们想要关联/卷积 v1 和 v2 时,我们基本上是在计算一系列点积并将它们放入输出向量中。假设 v1 是三个元素,v2 是 10 个元素。我们计算的点积如下:
output[0] = v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2]
output[1] = v1[0]*v2[1]+v1[1]*v2[2]+v1[2]*v2[3]
output[2] = v1[0]*v2[2]+v1[1]*v2[3]+v1[2]*v2[4]
output[3] = v1[0]*v2[3]+v1[1]*v2[4]+v1[2]*v2[5]
output[4] = v1[0]*v2[4]+v1[1]*v2[5]+v1[2]*v2[6]
output[5] = v1[0]*v2[7]+v1[1]*v2[8]+v1[2]*v2[9]
output[6] = v1[0]*v2[8]+v1[1]*v2[9]+v1[2]*v2[10] #note this is
#mathematically valid but might give you a run time error in a computer implementation
如果需要真正的卷积,可以翻转输出。
output[5] = v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2]
output[4] = v1[0]*v2[1]+v1[1]*v2[2]+v1[2]*v2[3]
output[3] = v1[0]*v2[2]+v1[1]*v2[3]+v1[2]*v2[4]
output[2] = v1[0]*v2[3]+v1[1]*v2[4]+v1[2]*v2[5]
output[1] = v1[0]*v2[4]+v1[1]*v2[5]+v1[2]*v2[6]
output[0] = v1[0]*v2[7]+v1[1]*v2[8]+v1[2]*v2[9]
请注意,输出中的元素少于 10 个,为简单起见,我仅在定义 v1 和 v2 的情况下计算卷积
还要注意,卷积只是一些点积。多年来,为了能够加速卷积,已经进行了大量工作。扫点积很慢,可以通过首先将向量转换为傅立叶基空间,然后计算单个向量乘法然后反转结果来加快速度,尽管我不会在这里讨论...
您可能想查看这些资源以及谷歌搜索:Calculating Pearson correlation and significance in Python