Bagaimana untuk Mengindeks Tatasusunan N-Dimensi dengan Cekap dengan Tatasusunan Indeks Dimensi Rendah?

Mary-Kate Olsen
Lepaskan: 2024-10-21 13:09:02
asal
1025 orang telah melayarinya

How to Efficiently Index N-Dimensional Arrays with Lower-Dimensional Index Arrays?

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

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

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

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

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!

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