Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengakses Nilai dalam Tatasusunan Berbilang Dimensi Menggunakan Tatasusunan Dimensi Rendah dengan Berkesan?
Mengakses Tatasusunan Berbilang Dimensi dengan Tatasusunan Dimensi Rendah
Dalam tatasusunan berbilang dimensi, mendapatkan semula nilai sepanjang dimensi tertentu menggunakan tatasusunan dimensi yang lebih rendah boleh mencabar. Pertimbangkan contoh di bawah:
<code class="python">a = np.random.random_sample((3,4,4)) b = np.random.random_sample((3,4,4)) idx = np.argmax(a, axis=0)</code>
Bagaimanakah kita boleh mengakses maxima dalam menggunakan idx seolah-olah kita telah menggunakan a.max(axis=0)? Bagaimanakah kita boleh mendapatkan semula nilai yang sepadan daripada b?
Penyelesaian Elegan Menggunakan Pengindeksan Lanjutan
Pengindeksan lanjutan menyediakan cara yang fleksibel untuk mencapai perkara ini:
<code class="python">m, n = a.shape[1:] # Extract dimensions excluding axis 0 I, J = np.ogrid[:m, :n] a_max_values = a[idx, I, J] # Index using the grid b_max_values = b[idx, I, J]</code>
Penyelesaian ini mengeksploitasi fakta bahawa grid [idx, I, J] merangkumi semua kemungkinan kombinasi indeks untuk dimensi yang selebihnya.
Generalisasi untuk Dimensi Arbitrari
Untuk tatasusunan n-dimensi am, fungsi boleh ditakrifkan untuk menggeneralisasikan penyelesaian di atas:
<code class="python">def argmax_to_max(arr, argmax, axis): """ Apply argmax() operation along one axis to retrieve maxima. Args: arr: Array to apply argmax to argmax: Resulting argmax array axis: Axis to apply argmax (0-based) Returns: Maximum values along specified axis """ new_shape = list(arr.shape) del new_shape[axis] grid = np.ogrid[tuple(map(slice, new_shape))] # Create grid of indices grid.insert(axis, argmax) return arr[tuple(grid)]</code>
Kaedah Pengindeksan Alternatif
Sebagai alternatif, fungsi boleh dibuat untuk menjana grid indeks untuk semua paksi:
<code class="python">def all_idx(idx, axis): grid = np.ogrid[tuple(map(slice, idx.shape))] grid.insert(axis, idx) return tuple(grid)</code>
Grid ini kemudiannya boleh digunakan untuk mengakses tatasusunan berbilang dimensi dengan tatasusunan berdimensi rendah:
<code class="python">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 Nilai dalam Tatasusunan Berbilang Dimensi Menggunakan Tatasusunan Dimensi Rendah dengan Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!