Seite 1 von 1

Index-Zuweisung bei 3D-Array

Verfasst: Sonntag 1. Januar 2023, 12:59
von Wallower
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!

Re: Index-Zuweisung bei 3D-Array

Verfasst: Montag 2. Januar 2023, 08:05
von Sirius3
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))