python correlation_Python实现的距离相关函数(Distance correlation)

原文:https://gist.github.com/satra/aa3d19a12b74e9ab7941from scipy.spatial.distance import pdist, squareform

import numpy as np

from numbapro import jit, float32

def distcorr(X, Y):

""" Compute the distance correlation function

>>> a = [1,2,3,4,5]

>>> b = np.array([1,2,9,4,4])

>>> distcorr(a, b)

0.762676242417

"""

X = np.atleast_1d(X)

Y = np.atleast_1d(Y)

if np.prod(X.shape) == len(X):

X = X[:, None]

if np.prod(Y.shape) == len(Y):

Y = Y[:, None]

X = np.atleast_2d(X)

Y = np.atleast_2d(Y)

n = X.shape[0]

if Y.shape[0] != X.shape[0]:

raise ValueError('Number of samples must match')

a = squareform(pdist(X))

b = squareform(pdist(Y))

A = a - a.mean(axis=0)[None, :] - a.mean(axis=1)[:, None] + a.mean()

B = b - b.mean(axis=0)[None, :] - b.mean(axis=1)[:, None] + b.mean()

dcov2_xy = (A * B).sum()/float(n * n)

dcov2_xx = (A * A).sum()/float(n * n)

dcov2_yy = (B * B).sum()/float(n * n)

dcor = np.sqrt(dcov2_xy)/np.sqrt(np.sqrt(dcov2_xx) * np.sqrt(dcov2_yy))

return dcor

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值