繁体   English   中英

我想找到两个列表之间的相关性,每个列表都有两个数组。 我为此编写了一个代码,但发现值错误。 我该如何解决这个问题?

[英]I want to find correlation between two list, and each list has two array. I wrote a code for this but find the value error. How can I solve this?

import numpy as np
from scipy import stats
LP_obs = np.loadtxt(fname = "D:\Python_dir\LP_obs.txt")
LP_sim = np.loadtxt(fname = "D:\Python_dir\LP_sim.txt")
LP_obs_1 = np.loadtxt(fname = "D:\Python_dir\LP_obs_1.txt")
LP_sim_1 = np.loadtxt(fname = "D:\Python_dir\LP_sim_1.txt")

def rsquared(x, y):   
    slope, intercept, r_value, p_value, std_err = scipy.stats.linregress(x, y)
    return r_value**2

list1=[]
list2=[]
list1.append((LP_obs,LP_obs_1)) 
list2.append((LP_sim,LP_sim_1))

for i in list1:
    for j in list2:    
        R=rsquared(i,j)
q=[]
q.append(R)
print(q)

我从 a.txt 文件输入数据。 运行代码后,我得到了错误:

File "D:\Anaconda\lib\site-packages\scipy\stats\_stats_mstats_common.py", line 116, in linregress
ssxm, ssxym, ssyxm, ssym = np.cov(x, y, bias=1).flat
ValueError: too many values to unpack (expected 4)

我该如何解决?

错误在行中(您没有显示):

ssxm, ssxym, ssyxm, ssym = np.cov(x, y, bias=1).flat

在左侧,您有 4 个变量。 错误说np.cov(....).flat产生超过 4 个值( flatnumpy.flatiter

np.cov(...)产生什么? 根据文档? 根据你自己的代码测试? 这些是你应该检查的事情!

如果此cov调用不是您的代码的一部分,那么您需要显示整个回溯。

===

查看函数,我看到np.cov(x,y)scipy.stats.linregress(x, y)调用,而后者又通过rsquared(i,j)调用

告诉我们您正在传递的i,j

这段代码看起来很可疑。

为什么 append 为空列表? 你在这之后看过list1吗? 您发送给rquaredi,j看起来对吗?

list1=[]
list2=[]
list1.append((LP_obs,LP_obs_1)) 
list2.append((LP_sim,LP_sim_1))

for i in list1:
    for j in list2:    
        R=rsquared(i,j)
q=[]
q.append(R)
print(q)

q append 是怎么回事,在 for 循环之外? 您只需使用最后一个R 执行一次R 您没有累积那些R值。

尝试这个:

slope, intercept, r_value, std_err = scipy.stats.mstats.linregress(x,y)        

尝试更改代码的附加部分

list1.append(LP_obs)  
list1.append(LP_obs_1)  
list2.append(LP_sim)  
list2.append(LP_sim_1)

我认为您收到错误是因为您附加了两个列表的元组,使其成为二维。 我认为 function 不接受二维 arrays 作为输入。 我希望通过这样做,您将获得正确的所需答案。

如果上述方法不能解决您的问题,请尝试以下操作:

你不能只是连接两个一维 arrays 并做到这一点

a1 = np.concatenate((LP_obs,LP_obs_1))
a2 = np.concatenate((LP_sim,LP_sim_1))

def rsquared(x, y):   
    slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
    return r_value**2

R=rsquared(a1,a2)
q=[]
q.append(R)
print(q)

如果这不是您的要求,请说出您要查找哪些列表的 r 值?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM