Ich versuche, die 'Macht' einer Python-Liste/Matrix mit numpy zu bekommen. Meine einzige aktuelle Arbeitslösung ist eine iterative Funktion np.dot():Numpy 2D Array - Power Of - Keine Antwort?
def matr_power(matrix, power):
matrix_a = list(matrix)
matrix_b = list(matrix)
for i in range(0, power-1):
matrix_a = np.dot(matrix_a, matrix_b)
return matrix_a
Diese arbeitet für meine Bedürfnisse, aber ich bin mir bewusst, es ist wahrscheinlich nicht die effizienteste Methode.
Ich habe versucht, meine Liste in ein numpy Array zu konvertieren, Power-Operationen darauf auszuführen, und dann zurück zu einer Liste, damit es in der Form verwendbar ist, die ich brauche. Die Konvertierungen scheinen zu passieren, aber die Leistungsberechnung nicht.
while (foo != bar):
matr_x = np.asarray(matr_a)
matr_y = matr_x ** n
matr_out = matr_y.tolist()
n += 1
# Other code here to output certain results
Das Problem ist, die Matrix in ein Array umgewandelt wird, wie erwartet, aber, wenn die Stromoperation durchgeführt (**
) matr_y
endet als die gleichen wie matr_x
als ob keine Berechnung jemals durchgeführt wurde. Ich habe versucht, np.power(matr_y, n)
und einige andere Lösungen in verwandten Fragen zu Stack Overflow gefunden.
Ich habe versucht, die numpy Dokumentation zu verwenden, aber (entweder ich missverstehe es, oder) es bestätigt nur, dass dies wie erwartet funktionieren sollte.
Beim Überprüfen der Debugging-Konsole in PyCharm scheint alles in Ordnung zu sein (alle Matrizen/Listen/Arrays werden wie erwartet konvertiert), außer dass die Berechnung matr_x ** i
nie berechnet wird (oder sonst nie ingespeichert wird).
Antwort
Obwohl es möglich ist, mit dem Operator eine **
numpy Matrix zu verwenden, die beste Lösung mit numpy der linalg matrix_power Verfahren numpy Arrays (wie numpy Matrizen veraltet sind) in Kombination zu verwenden ist.
matr_x = np.array(mat_a)
matr_y = np.linalg.matrix_power(matr_x, path_length)
work_matr = matr_y.tolist()
Es ist nun auch klar, dass die Funktion von **
wird elementweise früher entdeckt hatte, wurde möglicherweise ich eine Adjazenzmatrix mit (nur Nullen und Einsen) nicht.
Für numpy Arrays '**' Handlungen * elementweise *. –
Okay danke, aber Power (matr_y, i) scheint auch nicht so zu funktionieren wie ich es erwartet habe, ist das auch elementweise? Iteriert durch np.dot() meine einzige Option? – Matchoo
Ja, "Macht" ist auch elementweise, wie in der ersten Zeile seines Docstrings erklärt. :) –