Seite 1 von 1

Indices in Arrays werden anders als erwartet durchlaufen, warum?

Verfasst: Sonntag 24. März 2019, 17:08
von Erhy
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]]])

Re: Indices in Arrays werden anders als erwartet durchlaufen, warum?

Verfasst: Sonntag 24. März 2019, 17:33
von Sirius3
Im einen Fall erzeugst Du ein neues Array mit anderer Anordnung der Dimensionen.

Einfach:

Code: Alles auswählen

fromarr * [100, 1000] + [1,2]

Re: Indices in Arrays werden anders als erwartet durchlaufen, warum?

Verfasst: Sonntag 24. März 2019, 18:49
von Erhy
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  \
    ] )