Indices in Arrays werden anders als erwartet durchlaufen, warum?

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
Erhy
User
Beiträge: 64
Registriert: Mittwoch 2. Januar 2019, 21:09

Hallo!
Warum bringt der Code

Code: Alles auswählen

toarrV1 = np.array( [
...      fromarr[:,:,0] * 100 + 1,
...      fromarr[:,:,1] * 10000 + 2,
...     ] )
ein für mich unerwartetes Ergebnis. Die Indices im Ergebnis, entsprechen nicht der Anordnung in den Angaben.
Was muss ich wissen, um solche Irrtümer zu vermeiden?

Mit einer für mich brauchbaren Kodierung In python:

Code: Alles auswählen

>>> import numpy as np
>>> fromarr = np.array( [ \
...     [ \
...         [ 0, 1], \
...         [ 2, 3]  \
...     ], \
...     [ \
...         [ 4, 5], \
...         [ 6, 7]  \
...     ] \
...                      ])
>>> fromarr
array([[[0, 1],
        [2, 3]],

       [[4, 5],
        [6, 7]]])
>>> toarrV1 = np.array( [
...      fromarr[:,:,0] * 100 + 1,
...      fromarr[:,:,1] * 10000 + 2,
...     ] )
>>> toarrV1
array([[[    1,   201],
        [  401,   601]],

       [[10002, 30002],
        [50002, 70002]]])
>>> 
>>>  # so funktioniert es für mich:
...        
>>> toarrV2 = np.empty_like(fromarr, dtype = np.int )
>>> toarrV2[:,:,0] = fromarr[:,:,0] * 100 + 1
>>> toarrV2[:,:,1] = fromarr[:,:,1] * 10000 + 2
>>> toarrV2
array([[[    1, 10002],
        [  201, 30002]],

       [[  401, 50002],
        [  601, 70002]]])
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Im einen Fall erzeugst Du ein neues Array mit anderer Anordnung der Dimensionen.

Einfach:

Code: Alles auswählen

fromarr * [100, 1000] + [1,2]
Erhy
User
Beiträge: 64
Registriert: Mittwoch 2. Januar 2019, 21:09

danke!
mein Beispiel ist für die Diskussion sehr reduziert.
In meinem realen Code, benötige ich für jede Spalte eine andere Funktion:

Code: Alles auswählen

picLab0to1 = np.array( [
    xylumkorrcs(np.clip( picLab[:,:,0], 0, 100 ) / 100.0 ),  \
    (np.clip( picLab[:,:,1], -100.0 , 100.0 ) + 100.0 ) / 200.0  \
    ] )
Antworten