背景 最近工作中需要用python计算大量的一维向量之间的相关系数, 其中: 测试数据: (1000, 100) one of them (100,) 模板数据: (1000, 100) one of them (100,) 那么就需要计算1,000,000次相关系数,那么在这种情况下, 计算效率就变得很重要了. 常见的几种计算相关系数的方法有: 基于Pandas DataFrame.corr() 实践了特别慢, 需要构建frame, 不推荐. 基于Numpy 1. np.cov() 这个是算协方差, 后续还需要手写代码进一步计算相关系数 2.np.corrcoef() 这个其实就是皮尔森系数的numpy实现, 算线性相关的. 基于scipy的三大相关性系数 (pearson系数, spearman系数, kendll系数) 3.stats.pearsonr() 皮尔森系数, 协方差cov(X,Y)除以它们各自标准差的乘积(σX, σY). 计算正态分布数据的线性关系, 非线性关系上表现差.优点是计算简单, 结果就是相关系数r, 也比较好理解. 4.stats.spearmanr() 斯皮尔曼相关性系数, 可以理解为秩次之间的相关性, 只计算他们之间分别排序以后的位置的差距, 不在乎真实的数值. 需要用计算出来的p值和一个spearman秩相关系数界值表对比, 比较麻烦,