Index-Zuweisung bei 3D-Array

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
Wallower
User
Beiträge: 13
Registriert: Montag 17. Oktober 2022, 13:12

Hey und gutes Neues!

Bitte nicht von der Menge abschrecken lassen! Sind sehr simple Daten und ein vollständiger Minimalcode!

Und zwar habe ich ein (3, 2, 2)-Array, dessen drei 2D-Subarrays ich ohne Schleifen um 0°, 90° bzw. 180° drehen möchte:

Code: Alles auswählen

import numpy as np
import matplotlib.pyplot as plt

arr = np.array([[[2,3],
                 [3,3]],
                
                [[4,5],
                 [5,5]],
                
                [[6,7],
                 [7,7]]])

for k in np.arange(3):
    plt.imshow(arr[k,:,:], cmap='gray', vmin=2, vmax=7)
    plt.show()
Deshalb habe ich zwei (3, 2, 2)-Arrays mit den x- bzw. y-Indizes erstellt...

Code: Alles auswählen

x_ = np.array([[[0,1],
                [0,1]],
                
               [[0,1],
                [0,1]],
                
               [[0,1],
                [0,1]]]) 

y_ = np.array([[[0,0],
                [1,1]],
                
               [[0,0],
                [1,1]],
                
               [[0,0],
                [1,1]]])
... und diese entsprechend (gegen den Uhrzeigersinn) gedreht:

Code: Alles auswählen

x_rot = np.array([[[0,1],
                   [0,1]],
                
                  [[1,1],
                   [0,0]],
                
                  [[1,0],
                   [1,0]]]) 

y_rot = np.array([[[0,0],
                   [1,1]],
                 
                  [[0,1],
                   [0,1]],
                
                  [[1,1],
                   [0,0]]]) 
Ich versteh nicht, warum folgende Index-Zuweisung nicht klappt, sondern jedes 2D-Subarray um 180° gedreht wird:

Code: Alles auswählen

arr_rot = np.zeros((3, 2, 2), dtype=int)
arr_rot[:, x_, y_] = arr[:, x_rot, y_rot]

for k in np.arange(3):
    plt.imshow(arr_rot[k,:,:], cmap='gray', vmin=2, vmax=7)
    plt.show()

Freue mich über jede Hilfe!
Sirius3
User
Beiträge: 18275
Registriert: Sonntag 21. Oktober 2012, 17:20

Mit Index-Spielereien kann man nicht um 90° rotieren.
Dafür gibt es np.rot90:

Code: Alles auswählen

np.rot90(arr, axes=(1,2))
Antworten