Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengakses Tatasusunan N-Dimensional dengan Tatasusunan (N-1)-Dimensi dengan Cekap?

Bagaimana untuk Mengakses Tatasusunan N-Dimensional dengan Tatasusunan (N-1)-Dimensi dengan Cekap?

Susan Sarandon
Susan Sarandonasal
2024-10-21 11:57:03140semak imbas

How to Access N-Dimensional Array with (N-1)-Dimensional Array Efficiently?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn