Hallo,
gerne würde ich eine Matrix in latex Schreibweise darstellen. Das funktioniert für sympy Arrays recht gut. Aber ich habe numpy Arrays. Wie gehe ich vor?
Wie wandle ich numpy array in ein sympy array um?
@Brando: indem Du halt die Ausgabe der Matrix so hinformatierst, wie Du es brauchst
Code: Alles auswählen
latex = '\\left[\\begin{matrix}%s\\end{matrix}\\right]' % ' \\\\ '.join(' & '.join(map(str,r)) for r in matrix)
@Brando: Wieviel ”Forschung” hast Du denn bitte in die Beantwortung dieser Frage gesteckt? Was hast Du gemacht und was funktionierte daran nicht?
Also die Matrizen habe ich wie folgt gewonnen:
Dann habe ich folgendes ausprobiert:
Ich erhalte eine Ausgabe ohne eine Latexformatierung der Matrizen. Wenn ich q,r in sympy Matrizen umformen könnte glaube ich würde es funktionieren.
Code: Alles auswählen
a_matrix=zeros(matrix.shape[0], matrix.shape[1])
for i in range(matrix.shape[0]):
for j in range(matrix.shape[1]):
a_matrix[i,j]=randint(-10,10)
Code: Alles auswählen
q,r = np.linalg.qr(a_matrix)
q_m=Matrix(q)
r_m=Matrix(r)
q_matrix=latex(q_m)
q_matrix=q_matrix.replace("left[", "left(")
q_matrix=q_matrix.replace("right]", "right)")
r_matrix=latex(r_m)
r_matrix=r_matrix.replace("left[", "left(")
r_matrix=r_matrix.replace("right]", "right)")
str="$\langle"+q_matrix+","+r_matrix+ "\\rangle$"
matrizen_latex=widgets.Latex()
matrizen_latex.value= q_matrix
display(matrizen_latex)
Zuletzt geändert von Anonymous am Donnerstag 25. August 2016, 18:27, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Folgender Code führt auf einen MathProcessing Error
Code: Alles auswählen
q,r = np.linalg.qr(a_matrix)
latex_q = '\\left[\\begin{matrix}%s\\end{matrix}\\right]' % ' \\\\ '.join(' & '.join(map(str,r)) for r in q)
matrizen_latex=widgets.Latex()
matrizen_latex.value= latex_q
display(matrizen_latex)
@Brando: Wie man eine Matrix mit Zufallswerten erstellt wurde Dir soweit ich mich erinnere schon mindestens zweimal gezeigt. Warum machst Du das immer noch so verdammt umständlich?
Wie man eine Numpy-Matrix oder ein Numpy-Array in ein `sympy.Matrix`-Objekt umwandelt weisst Du ja anscheinend, das ist also nicht das Problem. Also wenn man jetzt mal davon ausgeht das `Matrix` an den Wert von `sympy.Matrix` gebunden ist. Also ist Deine Problembeschreibung falsch, denn bis dahin funktioniert es ja. Also musst Du heraus finden warum die weiteren Schritte nicht mehr funktionieren. Schau Dir die Zwischenergebnisse an. Was erwartest Du jeweils und was kommt tatsächlich dabei heraus.
Bei dem `MathProcessingError` (?) wäre ein Traceback ganz nett.
Wir haben hier auch nicht zum ersten mal das Problem, dass man das nicht einfach mal nachvollziehen kann, weil da Teile fehlen, inklusive einer Beschreibung wie man das letztendlich ausführen soll. Denn das ist ja offenbar immer noch etwas das irgendwie im Kontext eines Jupyter-Notebooks laufen soll/muss.
Code: Alles auswählen
In [37]: np.random.randint(-10, 10, (3, 3))
Out[37]:
array([[-4, -1, 6],
[ 8, -1, -2],
[-3, 1, 4]])
Bei dem `MathProcessingError` (?) wäre ein Traceback ganz nett.
Wir haben hier auch nicht zum ersten mal das Problem, dass man das nicht einfach mal nachvollziehen kann, weil da Teile fehlen, inklusive einer Beschreibung wie man das letztendlich ausführen soll. Denn das ist ja offenbar immer noch etwas das irgendwie im Kontext eines Jupyter-Notebooks laufen soll/muss.
@Brando: Nicht glauben; wissen. Diese Vermutung zu überprüfen ist ja nun nicht sooo schwer:
Code: Alles auswählen
In [39]: a_matrix
Out[39]:
array([[-4, -1, 6],
[ 8, -1, -2],
[-3, 1, 4]])
In [40]: np.linalg.qr(a_matrix)
Out[40]:
(array([[-0.42399915, -0.83996775, 0.33864273],
[ 0.8479983 , -0.23691398, 0.47409982],
[-0.31799936, 0.48818638, 0.81274255]]),
array([[ 9.43398113, -0.74199852, -5.51198898],
[ 0. , 1.56506811, -2.613233 ],
[ 0. , 0. , 4.33462695]]))
Nun gut; eine solche Darstellung versuche ich mit folgendem Code um eine aus numpy in sympy umgewandelte Formel als Matrize darzustellen. Es gibt aber wieder eine Fehlermeldung:
die folgende Fehlermeldung:
MathProcessingError
Code: Alles auswählen
q,r = np.linalg.qr(a_matrix)
q_mat=Matrix(q)
q_matrix=latex(q_mat)
q_matrix=q_matrix.replace("left[", "left(")
q_matrix=q_matrix.replace("right]", "right)")
matrizen_latex=widgets.Latex()
matrizen_latex.value= q_matrix
display(matrizen_latex)
MathProcessingError
@Brando: Du willst LaTeX verwenden, ohne LaTeX zu lernen und Du willst Python verwenden, ohne Python zu lernen. Wie lange glaubst Du, ziehen wir Dich hier noch durch?
Vielleicht sollte man LaTeX sagen, dass man eine Formel haben will. Und wenn Du lieber runde Klammern willst, dann nimm halt gleich welche:
Vielleicht sollte man LaTeX sagen, dass man eine Formel haben will. Und wenn Du lieber runde Klammern willst, dann nimm halt gleich welche:
Code: Alles auswählen
latex = '\\left(\\begin{matrix}%s\\end{matrix}\\right)' % ' \\\\ '.join(' & '.join(map(str,r)) for r in matrix)
display(widgets.Latex(value='$$%s$$' % latex))
Und wenn man das mit `sympy.Matrix` lösen möchte, dann sollte man auch dort sagen das runde statt eckige Klammern verwendet werden sollen, statt das hinterher auf dem LaTeX-Quelltext zu ersetzen. `sympy` bietet da viele Möglichkeiten die LaTeX-Erzeugung zu beeinflussen. Das hatte ich aber auch schon mal in einem Beitrag in einem Deiner Themen geschrieben. Die `sympy`-Dokumentation hat wirklich viele Beispiele für die ganzen Optionen. Man muss das halt mal durcharbeiten.
Sirius: das Problem ist, dass dein Code nur einen mathProcessingError hervorruft und nicht funktioniert. Ich habe ihn wie folgt adaptiert:
Code: Alles auswählen
q,r = np.linalg.qr(a_matrix)
latex = '\\left(\\begin{matrix}%s\\end{matrix}\\right)' % ' \\\\ '.join(' & '.join(map(str,r)) for r in q)
display(widgets.Latex(value='$$%s$$' % latex))