Akses Tatasusunan N-Dimensi dengan Tatasusunan (N-1)-Dimensi
Diberi tatasusunan N-dimensi a dan (N- idx tatasusunan 1)-dimensi, tugas biasa adalah untuk mengakses elemen dalam yang ditentukan oleh indeks dalam idx. Ini boleh berguna untuk melaksanakan operasi seperti mencari maksimum atau mendapatkan semula nilai tertentu.
Penyelesaian Elegan Menggunakan Pengindeksan Lanjutan
Penyelesaian elegan melibatkan penggunaan pengindeksan lanjutan dengan fungsi ogrid NumPy :
<code class="python">m, n = a.shape[1:] I, J = np.ogrid[:m, :n] a_max_values = a[idx, I, J] b_max_values = b[idx, I, J]</code>
Ini mencipta meshgrid indeks dan menggunakannya untuk mengindeks ke dalam a dan b, menghasilkan tatasusunan yang mengandungi nilai yang sepadan.
Kes Umum dengan Fungsi
Untuk penyelesaian yang lebih umum yang berfungsi untuk mana-mana paksi tertentu, kita boleh mentakrifkan fungsi:
<code class="python">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)]</code>
Fungsi ini mengambil tatasusunan, argmaxnya sepanjang paksi yang ditentukan dan paksi itu sendiri . Ia kemudian membina meshgrid dan menggunakannya untuk mengekstrak elemen yang sepadan.
Pengindeksan Ringkas dengan Fungsi Tersuai
Untuk memudahkan lagi proses pengindeksan, kami boleh mencipta fungsi pembantu yang menjana grid indeks:
<code class="python">def all_idx(idx, axis): grid = np.ogrid[tuple(map(slice, idx.shape))] grid.insert(axis, idx) return tuple(grid)</code>
Fungsi ini mengembalikan sekumpulan indeks yang boleh digunakan terus untuk mengindeks ke dalam tatasusunan input:
<code class="python">axis = 0 a_max_values = a[all_idx(idx, axis=axis)] b_max_values = b[all_idx(idx, axis=axis)]</code>
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Tatasusunan N-Dimensional dengan Tatasusunan (N-1)-Dimensi dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!