특정 인덱스에 대한 Python numpy 2D 배열 합계

Jan 18 2021

다음과 같은 2 차원 배열이 있습니다.

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

그리고 나는 다음과 같은 특정 지수의 합계를 얻고 싶습니다.

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

이 링크의 stackoverflow에서 1-d 배열에 대한 유사한 질문 이 있었지만 사용하려고 할 때 오류가 발생했습니다 print(img[indices]). 의 요소 img가 인덱스로 나타내는 요소임을 분명히 하고 평균 그것의 합계.

예상 출력

[5, 7, 9]

답변

2 PabloC Jan 18 2021 at 10:00

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

결과가 [5, 7, 9]이면 목록 열의 합계입니다. 그런 다음 쉽습니다.

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

결과:

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

멋진 인덱스를 제공 할 때 인덱스 튜플의 각 요소는 다른 축을 나타냅니다. 인덱스 배열의 모양은 얻은 출력의 모양에 브로드 캐스트됩니다.

귀하의 경우의 행은 indices.T각 축의 인덱스입니다. 그것들을 인덱스 튜플으로 변환하고 추가 할 수 slice(None)있는데, 이는 :. 결과 2D 배열의 평균을 직접 취할 수 있습니다.

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

또 다른 방법은 splat 연산자를 사용하는 것입니다.

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