Suma tablic 2D w języku Python numpy po określonych indeksach
Istnieje tablica dwuwymiarowa, taka jak ta:
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]]
]
Chcę po prostu uzyskać sumę niektórych wskaźników, które są takie:
indices = [[0, 0], [0, 1]] # which means img[0][0] and img[0][1]
# means here is represents
W tym linku było podobne pytanie o tablicę 1-d w przepływie stosu , ale pojawił się błąd, gdy próbowałem użyć print(img[indices])
. Ponieważ chcę wyjaśnić, że elementem img
są te, które wskazują indeksami, a następnie otrzymuję oznaczać suma tego.
Oczekiwany wynik
[5, 7, 9]
Odpowiedzi
Użyj NumPy:
import numpy as np
img = np.array(img)
img[tuple(indices)].sum(axis = 0)
#array([5, 7, 9])
Jeśli wynikiem będzie [5, 7, 9], czyli suma w kolumnie listy. Wtedy łatwo:
img = np.asarray(img)
indices = [[0, 0], [0, 1]]
img[(indices)].sum(axis = 0)
Wynik:
array([5, 7, 9])
Gdy podajesz fantazyjny indeks, każdy element krotki indeksu reprezentuje inną oś. Kształt tablic indeksowych jest transmitowany do kształtu otrzymanego wyniku.
W twoim przypadku rzędy indices.T
to indeksy na każdej osi. Możesz przekonwertować je na krotkę indeksu i dołączyć slice(None)
, co jest programowym odpowiednikiem :
. Możesz bezpośrednio wziąć średnią wynikową tablicę 2D:
img[tuple(indices.T) + (slice(None),)].sum(0)
Innym sposobem jest użycie operatora splat:
img[(*indices.T, slice(None))].sum(0)