Ich mag würde zunächst mit der Tatsache ausgehen, daß es möglich ist, in numpy, eine Reihe von poly1d
Objekten zu erstellen:Numpy Probleme mit Arrays von poly1d Objekten
random_poly = np.frompyfunc(lambda i, j: np.poly1d(np.random.randint(1, 4, 3)), 2, 1)
def random_poly_array(shape):
return np.fromfunction(random_poly, shape)
a1 = random_poly_array((3,3))
Dies funktioniert gut, und wir können auch Matrizen aus dieser Form gemacht multiplizieren np.dot
mit:
a2 = random_poly_array((3,3))
a1_x_a2 = np.dot(a1, a2)
jedoch die meisten anderen Methoden nicht funktionieren. Zum Beispiel können Sie nicht eine Liste bestimmter poly1d
Objekte nehmen und es in ein Array umwandeln:
np.array([np.poly1d([1,2,3]), np.poly1d([1,2,3])])
Wie das wird ValueError: cannot copy sequence with size 2 to array axis with dimension 3
erhöhen. Hinzufügen zu der Verwirrung,
np.array([np.poly1d([1,2]), np.poly1d([1,2])])
wird keinen Fehler aus, sondern schaffen eine 2x2
Array von nur 2 Jahren. Das Hinzufügen von dtype=object
hat keine Auswirkungen, und numpy
wird weiterhin versuchen, die poly1d
Objekte in Arrays zu konvertieren.
Der Grund, warum dies problematisch ist, ist, dass man nicht eine Reihe von Dimension d und wandelt es in eine Reihe von poly1d
Objekten der Dimension d-1 nehmen. Ich hätte
arr = np.arange(1, 10).reshape(3,3)
np.apply_along_axis(np.poly1d, 0, arr)
Um ein Array von poly1d
Objekte zurück, sondern gibt sie einen unalterated Array. Noch schlimmer, wenn arr=np.arange(9).reshape(3,3)
, wird es einen Fehler werfen, da das erste poly1d
Objekt erstellt eine Länge von 2 statt 3 aufgrund der Null-Koeffizienten haben wird. Also, meine Frage ist das: Gibt es eine machbare Methode, poly1d
Arrays in numpy zu erstellen? Wenn nicht, warum nicht?
Sie können 'np.array ([Keine, np.poly1d ([1,2]), np.poly1d ([1,2])]) [1:]'. Nicht gerade hübsch, aber funktioniert. –
Das ist eine interessante Methode, und ich denke, ich habe einen Weg gefunden, um daraus ein 'poly1d' Array aus einem anderen Array zu erstellen. – Sebastian
Warum teilen Sie es nicht als Antwort? –