[英]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 个值( flat
是numpy.flatiter
)
np.cov(...)
产生什么? 根据文档? 根据你自己的代码测试? 这些是你应该检查的事情!
如果此cov
调用不是您的代码的一部分,那么您需要显示整个回溯。
===
查看函数,我看到np.cov(x,y)
由scipy.stats.linregress(x, y)
调用,而后者又通过rsquared(i,j)
调用
告诉我们您正在传递的i,j
。
这段代码看起来很可疑。
为什么 append 为空列表? 你在这之后看过list1
吗? 您发送给rquared
的i,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.