"Incompatible Dimensions" 将 lstsq 与 Python 的 numpy 结合使用
"Incompatible Dimensions" using lstsq with Python's numpy
首先是我的代码:
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 等于 "Matrix",b="x2"。然后我尝试使用最小二乘法来求解 X,但它不起作用。但是,如果我将 Matrix 更改为等于:
Matrix = [[0 for x in range(5)] for x in range(10)]
然后代码编译并正常运行(尽管显然值是错误的,因为 Matrix 不应该等于 ^ 那个。有什么想法吗?谢谢。
您需要转置矩阵:
Output = np.linalg.lstsq(Matrix.T, x2)[0]
您的错误代码生成了一个包含 5 行、每行 10 个元素的矩阵。您的工作代码生成一个包含 10 行 5 个元素的矩阵。
您可能还应该使用 np.array
而不是 np.matrix
,并且 return 是 np.array
而不是来自 square
的列表
首先是我的代码:
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 等于 "Matrix",b="x2"。然后我尝试使用最小二乘法来求解 X,但它不起作用。但是,如果我将 Matrix 更改为等于:
Matrix = [[0 for x in range(5)] for x in range(10)]
然后代码编译并正常运行(尽管显然值是错误的,因为 Matrix 不应该等于 ^ 那个。有什么想法吗?谢谢。
您需要转置矩阵:
Output = np.linalg.lstsq(Matrix.T, x2)[0]
您的错误代码生成了一个包含 5 行、每行 10 个元素的矩阵。您的工作代码生成一个包含 10 行 5 个元素的矩阵。
您可能还应该使用 np.array
而不是 np.matrix
,并且 return 是 np.array
而不是来自 square