Sono bloccato su un piccolo problema nel progetto al momento sto lavorando.Come ottenere una porzione riempita di un array multidimensionale?
Per arrivare dritto al punto, supponiamo di avere un numpy.array
bidimensionale - lo chiamerò arr
.
Ho bisogno di affettare arr
, ma questa sezione deve contenere un riempimento a seconda dell'intervallo selezionato.
Esempio:
arr = numpy.array([
[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[ 11, 12, 13, 14, 15],
[ 16, 17, 18, 19, 20],
[ 21, 22, 23, 24, 25]
])
In realtà, la risposta numpy
s' per arr[3:7, 3:7]
è:
array([[19, 20],
[24, 25]])
Ma ho bisogno di essere imbottito come se arr
erano più grandi di quanto realmente sia.
Ecco quello che mi serve come risposta per arr[3:7, 3:7]
:
array([[19, 20, 0, 0],
[24, 25, 0, 0],
[ 0, 0, 0, 0],
[ 0, 0, 0, 0]])
Questa imbottitura dovrebbe verificarsi anche nel caso di indici negativi. Se la porzione richiesta è più grande di tutta l'immagine, il riempimento deve corrispondere a in tutti i lati, se necessario.
Un altro esempio, indici negativi. Questo è il risultato atteso per arr[-2:2, -1:3]
:
array([[ 0, 0, 0, 0],
[ 0, 0, 1, 2],
[ 0, 0, 6, 7],
[ 0, 0, 11, 12]])
C'è qualche funzione nativa numpy
per questo? In caso negativo, qualche idea su come posso implementarla?
Gli indici negativi hanno già un significato in NumPy, lo stesso di Python in generale, dove -N significa "N elementi di ritorno dalla fine". Sovraccaricarlo per significare qualcosa di diverso in alcuni casi, ma non altri sarebbe una ricetta per una seria confusione. – abarnert
Inoltre, NumPy normalmente restituisce le visualizzazioni anziché le copie quando possibile. Ma ovviamente non è possibile ogni volta che ci potrebbe essere il padding. Quindi, questa non sarebbe una buona idea per l'indicizzazione in generale. – abarnert
Sì, lo so. Ma bene, l'ambito qui è semplicemente una funzione 'numpy' o un metodo interno. –