Я предполагаю, что вы взяли строку m, c = np.linalg.lstsq(A, y)[0]
от lstsq
example.
В этом примере решаются задачи линейной регрессии с один переменный и постоянный. В результате np.linalg.lstsq(A, y)
для этой задачи возвращает четырехэлементный кортеж (array([ 1. , -0.95]), array([ 0.05]), 2, array([ 4.10003045, 1.09075677]))
(первый элемент - решение, второй - остатки, третий - ранжирование матрицы коэффициентов, последний элемент - сингулярные значения матрицы коэффициентов). Итак, np.linalg.lstsq(A, y)[0]
(в примере) возвращает массив с двумя элементами, которые могут быть распакованы так, как они это делают: m, c = np.linalg.lstsq(A, y)[0]
(m = 1., c = -0.95
).
Вы решаете регрессию с двумя переменными и постоянными. Поэтому np.linalg.lstsq(A, y)[0]
будет возвращать массив с тремя элементами, и если вы хотите распаковать его так, как это было в примере вы можете сделать это следующим образом:
x1, x2, c = np.linalg.lstsq(A, y)[0]
Но более удобный способ будет (на мой взгляд):
x, residuals, rank, s = np.linalg.lstsq(A, y) #lstsq func always return four-element tuple
print 'solution is %s.' % str(x)
print 'matrix A rank is %d.' % rank
print 'residuals are %s.' % str(residuals)
print 'singular values of A are %s.' % str(s)
print 'first variable is %f.' % x[0]
print 'second variable is %f.' % x[1]
print 'constant is %f.' % x[2]
Что с этим не происходит? Ошибка? Плохой выход? Показать нам! – mhlester
Попробуйте сами и выясните. Я дал код. nnatarr - спасибо за ответ !! – user3210796