2024-05-16 22:38:59 发布
网友
我有两个一维数组,我想看看它们之间的相互关系。我在纽比应该用什么程序?我用的是numpy.corrcoef(arrayA, arrayB)和numpy.correlate(arrayA, arrayB),它们都给出了一些我无法理解或理解的结果。有人能解释一下如何理解和解释这些数值结果吗(最好用一个例子)?谢谢。
numpy.corrcoef(arrayA, arrayB)
numpy.correlate(arrayA, arrayB)
如果您对向量的np.correlate的结果感到困惑,可能是由于溢出所致:
>>> a = np.array([4,3,2,1,0,0,0,0,10000,0,0,0], dtype='int16') >>> np.correlate(a,a[:4]) array([ 30, 20, 11, 4, 0, 10000, 20000, 30000, -25536], dtype=int16)
这个例子还解释了correlate是如何工作的:
30=4*4+3*3+2*2+1*1 20=4*3+3*2+2*1+1*0 11=4*2+3*1+2*0+1*0 … 40000=4*10000+3*0+2*0+1*0 显示为40000-2**16=-25536
numpy.correlate只返回两个向量的互相关。
numpy.correlate
如果您需要了解相互关系,那么从http://en.wikipedia.org/wiki/Cross-correlation开始。
一个很好的例子可以通过查看自相关函数(一个与自身相关的向量):
import numpy as np # create a vector vector = np.random.normal(0,1,size=1000) # insert a signal into vector vector[::50]+=10 # perform cross-correlation for all data points output = np.correlate(vector,vector,mode='full')
当两个数据集重叠时,这将返回一个最大值为comb/shah的函数。由于这是一个自相关,两个输入信号之间不会有“滞后”。因此,相关性的最大值是vector.size-1。
如果只需要重叠数据的相关值,可以使用mode='valid'。
mode='valid'
目前我只能对numpy.correlate发表评论。它是一个强大的工具。我用它有两个目的。首先是在另一个模式中找到一个模式:
import numpy as np import matplotlib.pyplot as plt some_data = np.random.uniform(0,1,size=100) subset = some_data[42:50] mean = np.mean(some_data) some_data_normalised = some_data - mean subset_normalised = subset - mean correlated = np.correlate(some_data_normalised, subset_normalised) max_index = np.argmax(correlated) # 42 !
第二个用途(以及如何解释结果)是用于频率检测:
hz_a = np.cos(np.linspace(0,np.pi*6,100)) hz_b = np.cos(np.linspace(0,np.pi*4,100)) f, axarr = plt.subplots(2, sharex=True) axarr[0].plot(hz_a) axarr[0].plot(hz_b) axarr[0].grid(True) hz_a_autocorrelation = np.correlate(hz_a,hz_a,'same')[round(len(hz_a)/2):] hz_b_autocorrelation = np.correlate(hz_b,hz_b,'same')[round(len(hz_b)/2):] axarr[1].plot(hz_a_autocorrelation) axarr[1].plot(hz_b_autocorrelation) axarr[1].grid(True) plt.show()
找到第二个峰的指数。从这里你可以找到频率。
first_min_index = np.argmin(hz_a_autocorrelation) second_max_index = np.argmax(hz_a_autocorrelation[first_min_index:]) frequency = 1/second_max_index
如果您对向量的np.correlate的结果感到困惑,可能是由于溢出所致:
这个例子还解释了correlate是如何工作的:
30=4*4+3*3+2*2+1*1
20=4*3+3*2+2*1+1*0
11=4*2+3*1+2*0+1*0
…
40000=4*10000+3*0+2*0+1*0
显示为40000-2**16=-25536
numpy.correlate
只返回两个向量的互相关。如果您需要了解相互关系,那么从http://en.wikipedia.org/wiki/Cross-correlation开始。
一个很好的例子可以通过查看自相关函数(一个与自身相关的向量):
当两个数据集重叠时,这将返回一个最大值为comb/shah的函数。由于这是一个自相关,两个输入信号之间不会有“滞后”。因此,相关性的最大值是vector.size-1。
如果只需要重叠数据的相关值,可以使用
mode='valid'
。目前我只能对
numpy.correlate
发表评论。它是一个强大的工具。我用它有两个目的。首先是在另一个模式中找到一个模式:第二个用途(以及如何解释结果)是用于频率检测:
找到第二个峰的指数。从这里你可以找到频率。
相关问题 更多 >
编程相关推荐