通過IDL中的SVDC
和SVSOL
,您可以通過SVD分解求解線性最小二乘問題。這在numpy
由numpy.linalg.lstsq
函數完成。 (無需計算第一SVD分解,然後再解決。)
>>> import numpy as np
>>> A = np.array([[1,2,3],[4,5,6]])
>>> b = np.array([4,4])
>>> x, _, _, _ = np.linalg.lstsq(A,b)
>>> x
array([-2., 0., 2.])
>>> np.dot(A,x)
array([ 4., 4.])
請注意b
長度必須是一樣的A
行數,所以你的例子是錯誤的。只是爲了讓舒爾說我正確地解釋IDL的語義,這裏是在svsol
reference manual的例子:
>>> A = np.array(
... [[1.0, 2.0, -1.0, 2.5],
... [1.5, 3.3, -0.5, 2.0],
... [3.1, 0.7, 2.2, 0.0],
... [0.0, 0.3, -2.0, 5.3],
... [2.1, 1.0, 4.3, 2.2],
... [0.0, 5.5, 3.8, 0.2]])
>>> B = np.array([0.0, 1.0, 5.3, -2.0, 6.3, 3.8])
>>> x, _, _, _ = np.linalg.lstsq(A,B)
>>> print x
[ 1.00095058 0.00881193 0.98417587 -0.01009547]
你就不能使用:['scipy.linalg.solve(A,B)'] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.solve.html)? –
不,我正在尋找類似於IDL中'svsol'的東西。我所遵循的方法必須使用這種方法。 –