Python numpy 2D array somma su determinati indici
C'è un array 2-d come questo:
img = [
[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
[[2, 2, 2], [3, 2, 3], [6, 7, 6]],
[[9, 8, 1], [9, 8, 3], [9, 8, 5]]
]
E voglio solo ottenere la somma di alcuni indici che sono come questo:
indices = [[0, 0], [0, 1]] # which means img[0][0] and img[0][1]
# means here is represents
C'era una domanda simile sull'array 1-d in stackoverflow in questo link , ma ha ricevuto un errore quando ho provato a usare print(img[indices])
. Perché voglio mettere in chiaro che l'elemento di img
sono quelli che indica gli indici, e quindi ottenere il significare somma di esso.
Uscita prevista
[5, 7, 9]
Risposte
Usa NumPy:
import numpy as np
img = np.array(img)
img[tuple(indices)].sum(axis = 0)
#array([5, 7, 9])
Se il risultato sarebbe [5, 7, 9] che è la somma sulla colonna della lista. Quindi facile:
img = np.asarray(img)
indices = [[0, 0], [0, 1]]
img[(indices)].sum(axis = 0)
Risultato:
array([5, 7, 9])
Quando fornisci un indice di fantasia, ogni elemento della tupla indice rappresenta un asse diverso. La forma degli array di indice viene trasmessa in base alla forma dell'output ottenuto.
Nel tuo caso, le righe di indices.T
sono gli indici in ciascun asse. Puoi convertirli in una tupla di indice e aggiungere slice(None)
, che è l'equivalente programmatico di :
. Puoi prendere direttamente la media dell'array 2D risultante:
img[tuple(indices.T) + (slice(None),)].sum(0)
Un altro modo è usare l'operatore splat:
img[(*indices.T, slice(None))].sum(0)