Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengakses Tatasusunan Berbilang Dimensi dengan Dimensi Lebih Sedikit?

Bagaimana untuk Mengakses Tatasusunan Berbilang Dimensi dengan Dimensi Lebih Sedikit?

Linda Hamilton
Linda Hamiltonasal
2024-10-21 11:32:02839semak imbas

How to Access Multidimensional Arrays with Fewer Dimensions?

Mengakses Tatasusunan Berbilang Dimensi dengan Kurang Dimensi

Pertimbangkan tatasusunan n-dimensi, seperti a, dan (n-1)-dimensi tatasusunan, idx. Untuk mengakses menggunakan idx di sepanjang dimensi tertentu, kita boleh menggunakan pengindeksan lanjutan.

Untuk tatasusunan 3 dimensi a, kita boleh mengira nilai maksimum sepanjang dimensi pertama menggunakan idx seperti berikut:

<code class="python">m, n = a.shape[1:]
I, J = np.ogrid[:m, :n]
a_max_values = a[idx, I, J]</code>

Pendekatan ini boleh digeneralisasikan untuk tatasusunan dengan sebarang bilangan dimensi:

<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>

Untuk mengindeks tatasusunan n-dimensi dengan tatasusunan (n-1)-dimensi, kita boleh mencipta grid bagi 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>

Menggunakan grid ini, kita boleh mengindeks ke dalam tatasusunan input:

<code class="python">a_max_values = a[all_idx(idx, axis=axis)]
b_max_values = b[all_idx(idx, axis=axis)]</code>

Pendekatan ini menyediakan penyelesaian yang elegan untuk mengakses tatasusunan berbilang dimensi dengan dimensi yang lebih sedikit.

Atas ialah kandungan terperinci Bagaimana untuk Mengakses Tatasusunan Berbilang Dimensi dengan Dimensi Lebih Sedikit?. 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