Numpy-Array nicht richtig strukturiert...

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
yoyoba
User
Beiträge: 14
Registriert: Mittwoch 6. Januar 2016, 21:34

Nabend zusammen,

ich stehe gerade vor einem kleinen Problem, was mir allerdings mächtig Arger macht... ich habe mehrere Numpy-Arrays, welche alle eine Spalte und viele Zeilen haben. Nun möchte ich diese zu einem großen Array zusammenführen, wobei die erste Spalte jeder Zeile aus dem des ersten Arrays bestehen soll, die zweite Spalte aus dem des Zweiten... usw. im Prinzip folgendermaßen

Wert1 erstes Array Wert1 zweites Array Wert1 drittes Array
Wert2 erstes Array Wert2 zweites Array Wert2 drittes Array
Wert3 erstes Array Wert3 zweites Array Wert3 drittes Array

Und so weiter.

Derzeit sieht die Ausgabe so aus:

[[ 1 11 111]
[ 2 22 222]]


soll aber quasi so aussehen:
[[ 1 2
11 22
111 222]]

hinzu zu sagen wäre evtl noch, dass wenn ich in den Variablenexplorer von Spyder schaue, vor den Variablen noch der jeweilige Laufindex der Variable steht, 0,1,2,3 etc. (evtl ist das ja relevant)

ein Minibeispiel habe ich leider nicht so hinbekommen, dass die Ausgabe so aussieht wie in meinem derzeitigen Programm... die Zusammenführung der Arrays sieht allerdings folgendermaßen aus: a = np.array([x, y]) und dies führt zu der oben genannten Ausgabe.



Für Tipps und Lösungen bin ich sehr dankbar!
Vielen Dank.

Grüße
Yoyoba
Zuletzt geändert von yoyoba am Samstag 19. November 2016, 19:44, insgesamt 1-mal geändert.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@yoyoba: woher hast Du die Numpy-Arrays? Warum sind die nicht schon von anfang an so, wie Du sie möchtest?

Zusammensetzen tut man das mit hstack:

Code: Alles auswählen

x = numpy.hstack([a,b,c])
yoyoba
User
Beiträge: 14
Registriert: Mittwoch 6. Januar 2016, 21:34

Danke für die schnelle Antwort, während der Antwort habe ich den Thread allerdings noch einmal editiert...

Das Ergebnis mit concatenate führt zu folgendem: [ 1 11 111 2 22 222]


Leider noch nicht das, was ich suche... Danke trotzdem ;)
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du auch das axis-Argument entsprechend angepasst? Sirius3's Antwort mag aber simpler zu nutzen sein. hstack/vstack sind sozusagen vordefinierte concacenate-Aufrufe:

http://stackoverflow.com/questions/3335 ... lumn-stack
yoyoba
User
Beiträge: 14
Registriert: Mittwoch 6. Januar 2016, 21:34

Ich lade eine xlsx-Datei ein, diese hat in der ersten Zeile die Namen der Spalten. Dies landet in einer Variable "Einlesung". Auf diese Variable greife ich dann mit Einlesung["Spalte1"] zu und bearbeite die Werte entsprechend, anschließend schreibe ich diese dann in eine neue Variable (z.B. Variable "Spalte1bearbeitet"). Danach sollen diese dann in ein (wie oben beschriebenes) Array geschrieben werden. Leider führt dies, wie gesagt nicht zum Erfolg, die Variante mit dem hstack klang zwar gut, führt aber zu folgenden:

[ 1 11 111 2 22 222]


Danke.
yoyoba
User
Beiträge: 14
Registriert: Mittwoch 6. Januar 2016, 21:34

Ich habe nun folgende "kleine" Lösung:

wenn ich stetig nur eine Zeile jedes Arrays nehme geht es!

gesamt = np.hstack([Array1[1], Array2[1]])

so ginge es, habe mir überlegt einfach eine for-Schleife zu setzen mit Laufindex i

Code: Alles auswählen

        i = 0
        a = [3]
        for i in range (0, 3):
        	a[i] = np.hstack([Array1[i], Array2[i]])
kriege nun aufgrund dessen, dass bei der Variable a auch ein steht folgende Meldung:

IndexError: list assignment index out of range

Weiß jemand, wieso ich kein Laufindex an das Array setzen kann?
Danke
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Code: Alles auswählen

In [1]: a = [3]

In [2]: a[0]
Out[2]: 3

In [3]: a[1]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-3-3ef3908cabc7> in <module>()
----> 1 a[1]

IndexError: list index out of range

In [4]: a
Out[4]: [3]

In [5]: range(0, 3)
Out[5]: [0, 1, 2]
the more they change the more they stay the same
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@yoyoba: so ganz habe ich noch nicht kapiert, was Du hast: numpy-Arrays, Listen? Soweit ich jetzt verstanden habe, möchtest Du das Array einfach transponieren:

Code: Alles auswählen

x = numpy.array([a,b,c]).T
yoyoba
User
Beiträge: 14
Registriert: Mittwoch 6. Januar 2016, 21:34

Hallo, danke für eure beiden Antworten,

ja habe meinen Fehler mit [] gefunden, komme allerdings immernoch nicht weiter wie ich die Auflistung ausführe mit einer for-Schleife?...

@Sirius, habs mir grade mal angeschaut, sieht so aus als ob man es tatsächlich einfach transponieren könnte. Würde trotzdem grade mal das Rätsel mit der Schleife gerne lösen, wie ich sowas aufbauen könnte...
Antworten