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)
我从.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)
我该如何解决?
答案 0 :(得分:0)
该错误在该行中(您未显示):
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
调用
告诉我们您正在通过的list1
。
此代码段看起来可疑。
为什么要追加到空列表?此后,您是否看过i,j
?您发送给rquared
的{{1}}看起来正确吗?
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
附加功能是什么,它在for循环之外?您只能使用最后 R
追加一次。您不是在累积那些R
值。
答案 1 :(得分:0)
尝试一下:
slope, intercept, r_value, std_err = scipy.stats.mstats.linregress(x,y)
答案 2 :(得分:0)
尝试更改代码的附加部分
list1.append(LP_obs)
list1.append(LP_obs_1)
list2.append(LP_sim)
list2.append(LP_sim_1)
我认为您会收到此错误,因为您添加了两个列表的元组,使其成为二维。我认为函数不接受二维数组作为输入。我希望这样做会得到正确的所需答案。
如果上述方法不能解决您的问题,请尝试以下操作:
不能只连接两个一维数组并执行此操作
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值的列表?