Array befüllen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
schuesra
User
Beiträge: 26
Registriert: Donnerstag 4. Oktober 2018, 17:40

Hallo,

ich möchte gerne das Array "c" anhand des Arrays "D_tj_RLP" befüllen.

Code: Alles auswählen

D_tj_RLP = np.zeros((2,3,4))

c = np.array([ [2, 1],
               [1, 0],
               [1, 3] ])
Dabei soll nach folgender Logik vorgegangen werden:

Code: Alles auswählen

D_tj_RLP[0] = [[0,0,1,0],
               [0,1,0,0],
               [0,1,0,0] ]

D_tj_RLP[1] = [[0,1,0,0],
               [1,0,0,0],
               [0,0,0,1] ]
Kann mir da jemand bitte weiterhelfen?
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Code: Alles auswählen

c = np.concatenate([D_tj_RLP[0].argmax(axis=1).reshape(3,1), D_tj_RLP[1].argmax(axis=1).reshape(3,1)], axis=1)

Code: Alles auswählen

array([[2, 1],
       [1, 0],
       [1, 3]], dtype=int64)
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
schuesra
User
Beiträge: 26
Registriert: Donnerstag 4. Oktober 2018, 17:40

@ThomasL: Oh, tut mir Leid, ich meinte wie ich das Array "D_tj_RLP" mit "c" in der Logik von oben befüllen kann, also genau umgekehrt...
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@ThomasL: das was Du machst, geht auch einfach

Code: Alles auswählen

>>> D_tj_RLP.argmax(axis=2).T
array([[2, 1],
       [1, 0],
       [1, 3]])
Umgekehrt muß man nur die anderen Indizes erzeugen:

Code: Alles auswählen

D_tj_RLP[np.arange(D_tj_RLP.shape[0])[:,None],range(D_tj_RLP.shape[1]),c.T] = 1
schuesra
User
Beiträge: 26
Registriert: Donnerstag 4. Oktober 2018, 17:40

@Sirius3: Super danke! Das hat mir sehr für mein Problem geholfen :)
Antworten