我尝试在两个2x 3数组上做线性回归,一个是x值,一个是y值,其中每一行都是一个单独的数据集,但当我尝试在整个数组上计算时:
import numpy as np
from scipy.stats import linregress
sigma = [[10. 20. 40.]
[15. 30. 50.]]
tau = [[ 7. 14. 28. ]
[15.5 31.1 51.8]]
slope = linregress(sigma, tau)[0]
我得到的错误:
ValueError: too many values to unpack (expected 4)
但是,如果我手动选择行,它就可以正常工作:
slope = linregress(sigma[0,:], tau[0,:])[0]
我知道我可以用for循环得到我想要的,但是我觉得应该有一个更直接的方法,我只是缺少了。而且,我知道我可以在没有数组的情况下很简单地做到这一点,但是我希望得到正确的结果,这样我就可以在未来使用它来处理更大的数据集。谢谢!
1条答案
按热度按时间hfsqlsce1#
我认为最简单的解决方案是使用一个
for
循环。您正在使用SciPy的线性回归模块,通过阅读documentation,我认为您无法获得您正在寻找的矢量化解决方案。如果您不喜欢
for
循环解决方案,可能是因为它对于您将来必须科普的真实的数据集来说太慢了,您可以尝试使用列表解析的更紧凑的解决方案,它通常比简单的for循环更快(但取决于手头的问题,我没有关于您的真实应用程序的任何细节)。所以,你可以试试这样的方法:
我认为这是一个很好的解决方案。它是一个很短的一行代码(少于88个字符),它很清楚,而且它可能比显式
for
循环更快。或者,正如@MadPhysicist所建议的,您可以使用NumPy等函数来实现自己的线性回归函数,这样可以从矢量化中获益。