Zwei Arrays vergleichen und ausgeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Joey20
User
Beiträge: 9
Registriert: Dienstag 22. Januar 2019, 23:38

Ich gehe stark davon aus, dass mein Betreff sehr schwammig geschildert ist.
Also Leute , ich hab echt vieles versucht , leider ohne Erfolg.

Werde es mal mit einem Beispiel versuchen meine Problemstellung zu schildern.

Ich hab zwei Arrays:

A und B
A= array([[1. , 1.09, 1.08, 1.34],
[1. , 1.16, 1.26, 1.54],
[1. , 1.22, 1.07, 1.03],
[1. , 0.93, 0.97, 0.92],
[1. , 1.11, 1.56, 1.52],
[1. , 0.76, 0.77, 0.9 ],
[1. , 0.92, 0.84, 1.01],
[1. , 0.88, 1.22, 1.34]])

B=array([[0.1 , 0.01, 0.02, 0. ],
[0.1 , 0. , 0. , 0. ],
[0.1 , 0. , 0.03, 0.07],
[0.1 , 0.17, 0.13, 0.18],
[0.1 , 0. , 0. , 0. ],
[0.1 , 0.34, 0.33, 0.2 ],
[0.1 , 0.18, 0.26, 0.09],
[0.1 , 0.22, 0. , 0. ]])

Nun will ich
A[:,2]
mit
B[:,3]
vergleichen aber mit einer Bedingung.
Die Bedingung lautet ,alle Werte von
A[:,2]
größer 1.1 aus der Spalte zu entfernen und lediglich dann auch die Spaltenwerte von quote]B[:,3][/quote] zu betrachten.


Wäre in dem Fall:

Für
A[:,2] =[1.08,1.07,0.97,0.77,0.84]
und für
B[:,3]
wäre es dann
[0.,0.03,0.13,0.33,0.26]
Mein Ziel ist es dann von A Spalte 2 und 1 und von B Spalte 3 und 2 mit einer for Schleife zu vergleichen.

Ich wäre für jegliche Hilfe sehr dankbar :)
Sirius3
User
Beiträge: 18227
Registriert: Sonntag 21. Oktober 2012, 17:20

Erster Schritt ist eine Maske mit den gültigen Werten zu erzeugen:

Code: Alles auswählen

mask = A[:, 2] <= 1.1
if (A[mask, 2] == B[mask, 3]).all():
    print("gleich")
for-Schleifen braucht man nicht.
Joey20
User
Beiträge: 9
Registriert: Dienstag 22. Januar 2019, 23:38

WOW :)
So einfach geht das. Vielen lieben Danke
Joey20
User
Beiträge: 9
Registriert: Dienstag 22. Januar 2019, 23:38

Jetzt hätte ich doch noch mal eine Frage.
Und zwar habe ich es so gemacht

m=3
V = np.copy(B)
c=[ ]
for i in range(m-1,0,-1):
mm= A[:,i] <= 1.10
if(A[mm,i] == V[mm,i+1]).all():
print("gleich")

reg= np.polyfit(A[mm,i],V[mm,i+1],2)
C = np.polyval(reg,A[mm,i])
c.append(C)
...


Da kam ein ganz anderes Ergebnis raus, als das was ich berechnet hatte.
So habe ich mir mal paar Zeilen rausgenommen und geguckt wo der Fehler liegen kann.

for i in range(m-1,0,-1):
print(A[mm,i])

[1.08 0.97 0.77 0.84 1.22] ----> Sollte eig [1.08,1.07,0.97,077,0.84]
[1.09 0.93 0.76 0.92 0.88]. --> hier ist alles richtig


Woran kann es liegen ?
Benutzeravatar
__blackjack__
User
Beiträge: 13937
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Joey20: Da Du nicht zeigst wie `A` überhaupt zustande kommt, kann man da schlecht was dazu sagen warum das jetzt nicht dem entspricht was Du erwartest.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Joey20
User
Beiträge: 9
Registriert: Dienstag 22. Januar 2019, 23:38

@__blackjack__: A ist einfach aus einem Paper entnommen worden.
Daher kann ich dir auch nicht viel mehr sagen, war nur ein kleines Rechenbeispiel
Benutzeravatar
__blackjack__
User
Beiträge: 13937
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Joey20: Dann ist die Erklärung offensichtlich das Du es falsch abgetippt hast‽
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Joey20
User
Beiträge: 9
Registriert: Dienstag 22. Januar 2019, 23:38

@__blackjack__: Hab eben noch mal geschaut, leider alles richtig abgetippt . Sehr komisch
Benutzeravatar
__blackjack__
User
Beiträge: 13937
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Joey20: Dann liegt es an irgendeiner Stelle im Code die wir nicht kennen. Du kannst ja einfach mal strategisch im Programm verteilt testen ab welcher Stelle im Programmablauf Deine Erwartung an die Daten nicht mehr erfüllt sind, um die Stelle einzugrenzen an der das Array verändert wird.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Antworten