Jumlah larik 2D numpy Python di atas indeks tertentu
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 img
adalah yang ditunjukkan oleh indeks, dan kemudian mendapatkan berarti jumlah itu.
Output yang diharapkan
[5, 7, 9]
Jawaban
Gunakan NumPy:
import numpy as np
img = np.array(img)
img[tuple(indices)].sum(axis = 0)
#array([5, 7, 9])
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])
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.T
adalah 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)