2016-05-26 5 views
2

Basierend auf dem vereinfachten Beispiel unterDoppel Summierung von Matrixelementen in Python

enter image description here

Ich würde in meinem Code wie

from sympy import* 
import numpy as np 
init_printing() 

x, y = symbols('x, y') 

mat = Matrix([[x,1],[1,y]]) 

X = [1, 2, 3] 
Y = [[10, 20, 30], [40, 50, 60], [70, 80, 90]] 

die symbolischen x und y mit Werten von X zu ersetzen und Y und berechnen Sie natürlich die Doppelsummierung der gegebenen Matrix.

Ich versuche, das zu lösen, aber ich habe eine harte Zeit mit der Substitution in jedem Schritt. Jede Hilfe würde sehr geschätzt werden.

Antwort

3

Sie haben sowohl SymPy als auch NumPy importiert, so dass Sie hier eine Auswahl an Werkzeugen haben. Und für die Aufgabe, eine Menge numerischer Matrizen zu addieren, ist numpy das richtige Werkzeug. Hier ist, wie die Summe in numpy passiert:

sum([sum([np.array([[x,1], [1,y]]) for y in yr]) for x, yr in zip(X,Y)]) 

Hier steht yr für eine Reihe von Elementen von Y. Die äußere Summe über i-Index ist, der innere über j ist, obwohl die Liste Verständnis beseitigt die Notwendigkeit, zu buchstabieren die raus.

Das Ergebnis ist ein NumPy Array:

array([[ 18, 9], 
     [ 9, 450]]) 

aber man kann es in eine SymPy Matrix drehen Sie einfach durch Matrix() um sie setzen:

Matrix(sum([sum([np.array([[x,1], [1,y]]) for y in yr]) for x, yr in zip(X,Y)])) 
+0

Danke, das funktioniert großartig. In meinem Fall ist die Matrix jedoch größer und das Umschreiben der Zeilen muss automatisiert werden. Gibt es eine Möglichkeit, dies für jede Zeile der Matrix zu tun, ohne jede Zeile innerhalb des Arrays neu schreiben zu müssen? – mcluka

+0

Ich verstehe nicht, was "Umschreiben der Zeilen" bedeutet. –

+0

Nun, Sie mussten [x, 1], [1, y] schreiben und sie in ein Array umwandeln, aber wenn die Matrix größer ist mit, sagen wir, 10 Zeilen, wäre das nicht praktisch, da Sie schreiben müssten alle 10 Zeilen innerhalb des Arrays ... Ich dachte, wenn dies in einer Weise getan werden könnte, wo der Algorithmus dies für jede Zeile (Zeile) tun würde, ohne es innerhalb des Arrays zu schreiben ... hoffentlich machte ich mich klar :) – mcluka

Verwandte Themen