Bevor Ihr Problem zu berühren, durch documentation, np.polyfit
gibt nur zwei Argumente:
- ein Array von Koeffizienten für den Einbau Polynom
- des Kovarianzmatrix für diese Koeffizienten
nun die Das zweite Argument wird nur angezeigt, wenn Sie np.polyfit
mit zwei optionalen Argumenten aufrufen: full = False and cov=True
.
Zurück zu Ihrem Problem: Da Sie cov = True
(standardmäßig full=False
) nicht festlegen, gibt Ihre Funktion nur ein einzelnes Array zurück. Wenn Sie den Grad auf 1 setzen, hat das zurückgegebene Array zwei Elemente ([a,c]
in ax + c
) und python weist Ihrem Code automatisch m = a
und b = c
zu. Bei einem höheren Grad hat das zurückgegebene Array mehr als zwei Elemente, und Python versucht, sie allen Variablen zuzuordnen, die Sie vor der Zuweisung eingefügt haben, aber da es mehr als 2 gibt, benötigen Sie mehr als 2 Variablen. I.e. Betrachten Sie diesen kleinen Lauf in Python 2:
>>> a,c = [1,2]
>>> a
1
>>> c
2
>>> a,c = [1,2,3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
Nun ist der richtige Weg, dies zu tun ist, nur einen einzigen Rückgabewert gesetzt. Beispiel:
import pandas
import numpy as np
import sys
deg = int(sys.argv[1])
x = pandas.read_csv('test.csv',usecols=[0])
y = pandas.read_csv('test.csv',usecols=[1])
m = np.polyfit(x.values.flatten(), y.values.flatten(), deg)
print m
diesen Code wird angenommen, ist in der Datei stackoverflow.py
. Beispielaufrufe:
Chip [email protected] 09:15:[email protected] ~: python stackoverflow.py 1
[ 8. -12.]
Chip [email protected] 09:15:[email protected] ~: python stackoverflow.py 2
[ 1.00000000e+00 -1.45528372e-14 3.11727844e-14]
Chip [email protected] 09:15:[email protected] ~: python stackoverflow.py 3
[ -3.16472437e-16 1.00000000e+00 -2.82243562e-14 4.43123853e-14]
Mit anderen Worten, alle Koeffizienten werden in einem einzigen Array gepackt und zurückgegeben.