Jumlah larik 2D numpy Python di atas indeks tertentu

Jan 18 2021

Ada array 2-d seperti ini:

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

Dan saya hanya ingin mendapatkan jumlah indeks tertentu seperti ini:

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

Ada pertanyaan serupa tentang array 1-d di stackoverflow di tautan ini , tetapi mendapat kesalahan ketika saya mencoba menggunakan print(img[indices]). Karena saya ingin memperjelas bahwa elemen dari imgadalah yang ditunjukkan oleh indeks, dan kemudian mendapatkan berarti jumlah itu.

Output yang diharapkan

[5, 7, 9]

Jawaban

2 PabloC Jan 18 2021 at 10:00

Gunakan 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

Jika hasilnya [5, 7, 9] yang dijumlahkan di atas kolom daftar. Lalu mudah:

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

Hasil:

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

Saat Anda memberikan indeks mewah, setiap elemen tupel indeks mewakili sumbu yang berbeda. Bentuk array indeks disiarkan ke bentuk keluaran yang Anda dapatkan.

Dalam kasus Anda, baris dari indices.Tadalah indeks di setiap sumbu. Anda dapat mengonversinya menjadi tupel indeks dan menambahkan slice(None), yang setara dengan program :. Anda dapat mengambil mean dari larik 2D yang dihasilkan secara langsung:

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

Cara lain adalah dengan menggunakan operator percikan:

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