Somme de tableau 2D Python numpy sur certains indices

Jan 18 2021

Il existe un tableau 2D comme celui-ci:

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

Et je veux juste obtenir la somme de certains indices qui sont comme ceci:

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

Il y avait une question similaire à propos du tableau 1-d dans stackoverflow dans ce lien , mais il y a eu une erreur lorsque j'ai essayé d'utiliser print(img[indices]). Parce que je veux préciser que l'élément de imgsont ceux qui indiquent par des indices, puis obtenir le moyenne somme de celui-ci.

Production attendue

[5, 7, 9]

Réponses

2 PabloC Jan 18 2021 at 10:00

Utilisez 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

Si le résultat serait [5, 7, 9] qui est la somme sur la colonne de la liste. Alors facile:

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

Résultat:

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

Lorsque vous fournissez un index sophistiqué, chaque élément du tuple d'index représente un axe différent. La forme des tableaux d'index diffuse la forme de la sortie que vous obtenez.

Dans votre cas, les lignes de indices.Tsont les indices de chaque axe. Vous pouvez les convertir en un tuple d'index et ajouter slice(None), qui est l'équivalent programmatique de :. Vous pouvez prendre directement la moyenne du tableau 2D résultant:

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

Une autre façon consiste à utiliser l'opérateur splat:

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