Python numpy 2D-Arraysumme über bestimmte Indizes

Jan 18 2021

Es gibt ein 2D-Array wie dieses:

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]]
]

Und ich möchte nur die Summe bestimmter Indizes erhalten, die so aussehen:

indices = [[0, 0], [0, 1]] # which means img[0][0] and img[0][1]
# means here is represents

Es gab eine ähnliche Frage zu 1-D-Array im Stackoverflow in diesem Link , aber es wurde ein Fehler angezeigt , als ich versuchte, es zu verwenden print(img[indices]). Weil ich klarstellen möchte, dass das Element von imgdiejenigen sind, die durch Indizes angezeigt werden, und dann das erhalten bedeuten Summe davon.

Erwartete Ausgabe

[5, 7, 9]

Antworten

2 PabloC Jan 18 2021 at 10:00

Verwenden Sie NumPy:

import numpy as np

img = np.array(img)
img[tuple(indices)].sum(axis = 0)
#array([5, 7, 9])
1 TấnNguyên Jan 18 2021 at 10:16

Wenn das Ergebnis [5, 7, 9] wäre, ist dies die Summe über der Spalte der Liste. Dann einfach:

img = np.asarray(img)
indices = [[0, 0], [0, 1]]
img[(indices)].sum(axis = 0)

Ergebnis:

array([5, 7, 9])
1 MadPhysicist Jan 18 2021 at 10:07

Wenn Sie einen ausgefallenen Index angeben, repräsentiert jedes Element des Indextupels eine andere Achse. Die Form der Index-Arrays sendet an die Form der Ausgabe, die Sie erhalten.

In Ihrem Fall sind die Zeilen von indices.Tdie Indizes in jeder Achse. Sie können sie in ein Indextupel konvertieren und anhängen slice(None), was dem programmatischen Äquivalent von entspricht :. Sie können den Mittelwert des resultierenden 2D-Arrays direkt ermitteln:

img[tuple(indices.T) + (slice(None),)].sum(0)

Eine andere Möglichkeit ist die Verwendung des Splat-Operators:

img[(*indices.T, slice(None))].sum(0)