Rechnen mit Arrays

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
SiggiUP
User
Beiträge: 2
Registriert: Samstag 23. November 2019, 19:04

Hallo,
ich habe erst vor kurzem mit Python angefangen und möchte gerne zwei Mengen von Vektoren mit einander verknüpfen, indem ich sie addiere und dabei noch eine Funktion der beiden Vektoren in die dritte Komponente addiere. Ich habe das ganze mit zwei for loops geschrieben und gehe so die einzelnen Vektoren durch. Jetzt stellt sich mir die Frage ist es möglich das ganze ohne for Schleifen zu machen? Also gibt es eine clevere Art Mengen von arrays zu addieren (inklusiver einer Funktion die separat definiert wird?
Ich interessiere mich dafür da ich deutlich größere Mengen von Vektoren miteinander verknüpfen möchte und ich frage mich ob man das effizienter machen kann.
Nebenbei habe ich auch gerade das Problem, dass ich die Punkte nicht zu der Menge AB hinzufügen kann, weil das berechnete g ein ndarray ist. Vielleicht kann mir dabei auch jemand helfen, wie man damit richtig umgeht?

Code: Alles auswählen

import numpy as np
def w(x,y):
    return -2*x[0]*y[1]+2*x[1]*y[0]

A = [np.array([1,0,3]),np.array([3,4,5]),np.array([6,3,6]),np.array([3,4,6])]
B = [np.array([1,2,0]),np.array([2,44,15]),np.array([9,23,6]),np.array([3,6,5])]

AB = set()
for x in A:
    for y in B:
        g = x + y + np.array([0, 0, w(x, y)])
print('AB=',AB)
Vielen Dank!
Sirius3
User
Beiträge: 18217
Registriert: Sonntag 21. Oktober 2012, 17:20

Zuerst mußt Du Deine Listen in Matrizen umwandeln und dann einfach nur noch die Matrizen verknüpfen.

Code: Alles auswählen

A = np.array(A)
B = np.array(B)
AB = A[:,None,:] + B[None,:,:]
AB[:,:,2] -= 2*(A[:,None,0]*B[None,:,1] - A[:None,1]*B[None,:,0])
SiggiUP
User
Beiträge: 2
Registriert: Samstag 23. November 2019, 19:04

Hey,
vielen lieben Dank! für die schnelle Antwort und den hilfreichen Tipp. Das funktioniert gut. Eine Frage habe ich noch dazu: Gibt es auch eine Effiziente Art, das Produkt wieder in die vorherige Form zu bringen, als einen Array von Arrays? Wenn ich zum Beispiel AB ausgerechnet habe und dann noch einen Array C mit Arrays der Länge 3 habe und ABC ausrechnen möchte indem ich (AB) mit C multipliziere wie vorher.
Beste Grüße
Sirius3
User
Beiträge: 18217
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie willst Du denn eine 3x3-Matrix mit einem Vektor der Länge 3 multiplizieren?
Antworten