Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Mengindeks Tatasusunan N-Dimensi dengan Cekap dengan Tatasusunan Indeks Dimensi Rendah?
Mengindeks Tatasusunan N-Dimensi dengan Tatasusunan (N-1)-Dimensi
Mengakses tatasusunan N-dimensi dengan (N Tatasusunan -1)-dimensi memberikan cabaran apabila mencari nilai yang diselaraskan sepanjang dimensi tertentu. Pendekatan konvensional menggunakan np.argmax mungkin tidak mencukupi.
Pendekatan Pengindeksan Lanjutan
Pengindeksan yang elegan boleh dicapai melalui pengindeksan lanjutan menggunakan np.ogrid. Untuk tatasusunan 3D a dan argmaxnya di sepanjang dimensi pertama, idx:
import numpy as np a = np.random.random_sample((3, 4, 4)) idx = np.argmax(a, axis=0) m, n = a.shape[1:] I, J = np.ogrid[:m, :n] a_max_values = a[idx, I, J]
Pendekatan ini mencipta grid yang meluaskan tatasusunan indeks dengan berkesan kepada dimensi penuh tatasusunan asal.
Generalisasi untuk Dimensi Arbitrari
Untuk penyelesaian yang lebih umum, fungsi argmax_to_max() boleh ditakrifkan:
def argmax_to_max(arr, argmax, axis): new_shape = list(arr.shape) del new_shape[axis] grid = np.ogrid[tuple(map(slice, new_shape))] grid.insert(axis, argmax) return arr[tuple(grid)]
Fungsi ini mengambil tatasusunan asal, argmaxnya, dan paksi yang dikehendaki dan mengembalikan nilai maksimum yang sepadan.
Pendekatan Alternatif untuk Pengindeksan Umum
Untuk mengindeks sebarang tatasusunan N-dimensi dengan (N-1)-dimensi tatasusunan, fungsi all_idx() ialah penyelesaian yang lebih mudah:
def all_idx(idx, axis): grid = np.ogrid[tuple(map(slice, idx.shape))] grid.insert(axis, idx) return tuple(grid)
Menggunakan fungsi ini, pengindeksan ke dalam tatasusunan a dengan idx sepanjang paksi paksi boleh dicapai dengan:
axis = 0 a_max_values = a[all_idx(idx, axis=axis)]
Atas ialah kandungan terperinci Bagaimana untuk Mengindeks Tatasusunan N-Dimensi dengan Cekap dengan Tatasusunan Indeks Dimensi Rendah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!