Slice Array 2D in NumPy

Muhammad Maisam Abbas 30 gennaio 2023
  1. Slice 2D Array con indicizzazione di array in NumPy
  2. Slice 2D Array con la funzione numpy.ix_() in NumPy
Slice Array 2D in NumPy

Questo tutorial introdurrà come affettare un array 2D in NumPy.

Slice 2D Array con indicizzazione di array in NumPy

Se abbiamo un array NumPy 2D principale e vogliamo estrarre un altro sottoarray 2D da esso, possiamo usare il metodo di indicizzazione dell’array per questo scopo. Prendiamo un array di forma 4*4 per questo esempio. È abbastanza semplice estrarre il primo e l’ultimo elemento dell’array. Ad esempio, array[0:2,0:2] ci darà una vista o un sottoarray che contiene i primi due elementi all’interno dell’array sia verticalmente che orizzontalmente. Allo stesso modo, array[2:,2:] ci darà una vista o sotto-array che contiene gli ultimi due elementi all’interno dell’array sia verticalmente che orizzontalmente. Il lavoro più complesso è ottenere gli elementi da diverse righe e colonne saltando una riga o una colonna centrale. Il seguente esempio di codice ci mostra esattamente come ottenere ciò con l’indicizzazione di array in Python.

import numpy as np

x = range(16)

x = np.reshape(x, (4, 4))
print(x)

y = x[[[0], [2]], [1, 3]]
print(y)

Produzione:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[[ 1  3]
 [ 9 11]]

Nel codice sopra, abbiamo estratto gli elementi nelle righe 1 e 3 che si intersecano con le colonne 1 e 3 saltando la riga 2 e la colonna 2 con il metodo di indicizzazione dell’array in Python. Questo può essere fatto anche con un approccio simile ma con una sintassi diversa, come mostrato nell’esempio di codifica seguente.

import numpy as np

x = range(16)

x = np.reshape(x, (4, 4))
print(x)

y = x[0::2, 1::2]
print(y)

Produzione:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[[ 1  3]
 [ 9 11]]

Nel codice sopra, abbiamo anche estratto gli elementi nella riga 1 e 3 che si intersecano con la colonna 1 e 3 mentre si salta la riga 2 e la colonna 2 con il metodo di indicizzazione dell’array in Python. Questo metodo è più semplice dell’approccio precedente perché non prevede troppe parentesi ed è complessivamente più leggibile.

Slice 2D Array con la funzione numpy.ix_() in NumPy

La funzione numpy.ix_() forma una sequenza di elementi a forma di mesh aperta in Python. Questa funzione prende n array 1D e restituisce un array nD. Possiamo usare questa funzione per estrarre singole sezioni 1D dal nostro array principale e poi combinarle per formare un array 2D. Il seguente esempio di codice fa lo stesso lavoro degli esempi precedenti ma usando la funzione numpy.ix_() con l’indicizzazione degli array in Python.

import numpy as np

x = range(16)

x = np.reshape(x, (4, 4))
print(x)

y = x[np.ix_([0, 2], [1, 3])]
print(y)

Produzione:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[[ 1  3]
 [ 9 11]]

Nel codice sopra, abbiamo praticamente fatto esattamente la stessa cosa degli esempi precedenti, ma usando la funzione np.ix_() insieme all’indicizzazione degli array in Python.

L’idea principale alla base di tutti questi esempi è la stessa. Quando abbiamo creato il nostro array principale, gli è stato assegnato un buffer a seconda della sua forma e dimensione. Il metodo di indicizzazione dell’array crea un nuovo oggetto di tipo di dati array che punta al buffer di memoria del nostro array principale. In tutti gli esempi precedenti, anche se y è un nuovo array, ma non richiede alcun buffer in memoria. Punta solo a determinate posizioni sul buffer di memoria dell’array x. Questo è ciò che rende il metodo di indicizzazione dell’array migliore della semplice creazione di un nuovo array.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn