首先是我的代码:
import numpy as np
def square(list):
return [i ** 2 for i in list]
def multLists(x, y):
return x * y
def main():
x = np.array([1.02, 0.95, 0.87, 0.77, 0.67, 0.55, 0.44, 0.30, 0.16, 0.01])
y = np.array([0.39, 0.32, 0.27, 0.22, 0.18, 0.15, 0.13, 0.12, 0.13, 0.15])
a = square(y)
b = multLists(x,y)
c = x
d = y
e = np.ones(len(x))
x2 = square(x)
Matrix = np.matrix([a,b,c,d,e])
Output = np.linalg.lstsq(Matrix,x2)[0]
print Output
main()
我的错误代码:
Traceback (most recent call last):
File "problem6.py", line 26, in <module>
main()
File "problem6.py", line 22, in main
Output = np.linalg.lstsq(Matrix,x2)[0]
File "/usr/lib/python2.7/dist-packages/numpy/linalg/linalg.py", line 1828, in lstsq
raise LinAlgError('Incompatible dimensions')
numpy.linalg.linalg.LinAlgError: Incompatible dimensions
基本上,我试图解决Ax = b,A等于&#34;矩阵&#34;和b =&#34; x2&#34;。我然后尝试使用最小二乘来求解X,但它不起作用。但是,如果我将Matrix更改为等于:
Matrix = [[0 for x in range(5)] for x in range(10)]
然后代码编译并正常运行(虽然显然有错误的值,因为Matrix不应该等于那个。任何想法?谢谢。
答案 0 :(得分:2)
您需要转置矩阵:
Output = np.linalg.lstsq(Matrix.T, x2)[0]
您的代码损坏会产生一个包含5行10个元素的矩阵。您的工作代码生成一个包含10行5个元素的矩阵。
您可能也应该使用np.array
而不是np.matrix
,并返回np.array
而不是square