我有一个0和1的序列,例如,[0,1,0,0,0,1,0]。我想测量序列中零之间的相关性,即,给定一个零,第一个零之后有多可能是另一个零。我想用相关系数来做这件事。但是,如果我在序列中使用numpy.corrcoef(),它返回1.0,这不是真的。任何建议都很感激。下面是一个代码,它可以复制相同的内容:
import numpy as np
x = np.random.randint(0,2,1000)
x = x[...,np.newaxis]
rho = np.corrcoef(x.T)
print(rho)
3条答案
按热度按时间bis0qfac1#
您需要将
x
与其移位后的自身进行比较:输出:
如何工作
我们将每个值与下一个值进行比较:
0ejtzxu12#
你的问题有点不一致,因为你一方面说你想计算相关系数,另一方面又说你想计算概率。“相关性”的一般概念与概率有关,但皮尔逊相关系数,例如由
numpy.corrcoef()
计算的,根本不是概率。您在注解中澄清了您希望计算x[i+1]
相对于x[i]
的相关系数。它可能看起来像这样:
说明:
np.roll(x, -1)
生成x
的副本,其中元素已向左旋转一个位置。因此,每个元素都是x
的相应元素的后继元素(在x
中)。x
的最后一个元素没有后继元素,因此我们需要忽略它,以及x
的旋转版本的相应元素。使用[:-1]
进行切片可以实现这一点。np.corrcoef()
的相关计算。结果是提供每个变量与每个其他变量的相关系数的对称矩阵。在我们的例子中,只有两个变量,所以这个矩阵是2 x 2。主对角线上的元素是其中一个变量与自身的相关系数;它们应该相同地为1。非对角元素是一个变量与另一个变量的相关系数,并且这些应该是对称的。我们可以选择任何一个,上面的选择
[0][1]
。请注意,对于随机数据,例如本示例,互相关应该近似为零。(这是我们的(伪)随机数生成器的质量的度量。
niknxzdl3#
你的要求不难计算。我想你是想知道0后面跟着另一个0的概率。这段代码可以做到:
输出:
所以,2/3的零后面跟着另一个零,这是正确的。
我在这里做的是计算两个序列的异或,如果值相同,异或为1。然后我用原始序列与之进行NAND运算,只在有两个0的地方留下1。通过将该列表的总和除以原始列表中0的数量,我们得到答案。