Problem mit Weitergabe einer Liste in np.array -Befehl

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
flip1982
User
Beiträge: 18
Registriert: Montag 4. April 2016, 15:36

Hallo ihr lieben,
ich habe ein Problem mit der Weitergabe einer liste. ich habe einige 2D arrays erstellt (9 stück) und würde gerne einzelne davon zu einem 3D array verbinden. sie sind alle gleich groß. das zusammenfügen zu einem 3d array klappt auch super. Da ich aber tests mit verschiedenen zusammenstellungen des 3 arrays machen muss, wäre es natürlich super wenn ich immer eine liste mit einzelnen ausgewählten 2d array in den befehl np.array(hierdieliste) eingeben könnte.
problem ist nur die liste ist eine string bsp: hierdieliste = ["ar1,ar2,ar3,ar10"] und wird aus einem configurations-file weitergereicht: also so: config.hierdieliste
an der stelle im mein code wo config.hierdieliste aufgerufen wird sind darüber im code die gemeinten arrays erstellt worden.
python will aber nicht kapieren, dass ich ich mit der "hierdieliste" die einzelnen 2d arrays meine.

also konkret: wie kann ich in den befehl np.array() eine liste mit gewünschten arrays eingeben via wariable
bsp:

Code: Alles auswählen

hierdieliste = ["ar1,ar2,ar3,ar10"]
arraydreidim = np.array(hierdieliste)

ich hoffe ihr seid alle schlauer wie ich und habt lust mich an eurer weisheit teilhaben zulasssen.
danke schonmal
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

`hierdieliste = ["ar1,ar2,ar3,ar10"]` ist eine Liste mit _einem_ Element, nämlich dem String `"ar1,ar2,ar3,ar10"`. Das ist dann für Python dann halt auch so. Wenn du daraus eine Liste mit vier Elementen machen willst, musst du a) das einen Elemente auslesen und dann b) beim Komma splitten. Dann hast du eine Liste `['ar1', 'ar2', 'ar3', 'ar10']`.

Das eigentliche Problem liegt aber IMHO in der Config-Datei. Warum bekommst du von da eine 1-elementige Liste statt eine, die "richtig" wäre?

Gruß, noisefloor
flip1982
User
Beiträge: 18
Registriert: Montag 4. April 2016, 15:36

hallo noisefloor,
also im maincode hat das so funktioniert:

Code: Alles auswählen

stacked= np.array([blue,green,red,nir,mir1,mir2,ndvi,elev])
blue,green,red,nir,mir1,mir2,ndvi,elev sind im code darüber definiert. wird der code so ausgeführt ist alles wunderbar.
ich suche aber eine möglichkeit blue,green,red,nir,mir1,mir2,ndvi,elev aus dem configfile rüberzureichen... deine lösung mir den einzelnen stings statt dem großem einzelnem war bestimmt ein schritt in die richtige richtung. trotzdem hat es nict geklappt.
er gibt dann eine liste mit strings aus, statt eine liste mit den variablen die auf die einzelnen arrays (blue,green,red,nir,mir1,mir2,ndvi,elev) verweisen..
habt ihr sonst noch ideen?
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wie sieht dein Config-File denn aktuell aus?

Gruß, noisefloor
flip1982
User
Beiträge: 18
Registriert: Montag 4. April 2016, 15:36

aktuell wird diese liste aus dem config übergeben:

Code: Alles auswählen

urliste = ['blue','green','red','nir','mir1','mir2','ndvi','elev']
mit config.urliste kommt dann im main file das ganze so an wenn ich es printe: ['blue', 'green', 'red', 'nir', 'mir1', 'mir2', 'ndvi', 'elev']

wenn ich aber die urliste ohne strings mache im config, dann gibts probleme , weil ich ja im config natürlich keine variablen vorher definiert hab... das variablen definieren passiert ja alles im main. ich will ja "nur", das ich mein 3d array via config file zusammenstellen kann...
idee?
flip1982
User
Beiträge: 18
Registriert: Montag 4. April 2016, 15:36

so soll es im main ankommen :

Code: Alles auswählen

stacked= np.array([blue,green,red,nir,mir1,mir2,ndvi,elev])
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

auf "magische" Weise einen String in eine Variable umwandeln funktioniert aber nun mal nicht :-)

Abhilfe wäre z.B. ein Dict:

[codebox=pycon file=Unbenannt.txt]>>> import numpy as np
>>> list_from_config = ['blue', 'green', 'red']
>>> data = {'blue': [1, 0, 0], 'green': [0, 1, 0], 'red': [0, 0, 1]}
>>> for_array = [data[x] for x in list_from_config]
>>> stacked = np.array(for_array)
>>> stacked
array([[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])
>>>[/code]

Gruß, noisefloor
flip1982
User
Beiträge: 18
Registriert: Montag 4. April 2016, 15:36

hallo,
ja so gehts! vielen dank! hat mir sehr weitergeholfen
Antworten