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

Susan Sarandon
Lepaskan: 2024-10-21 11:57:03
asal
138 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!