特定のインデックスに対するPythonnumpy2D配列の合計

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)

別の方法は、スプラット演算子を使用することです。

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