Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menggulung Baris Matriks Secara Bebas Menggunakan Pengindeksan Lanjutan?

Bagaimana untuk Menggulung Baris Matriks Secara Bebas Menggunakan Pengindeksan Lanjutan?

Susan Sarandon
Susan Sarandonasal
2024-10-21 14:11:30674semak imbas

How to Roll Matrix Rows Independently Using Advanced Indexing?

Melancarkan Baris Matriks Secara Bebas dengan Pengindeksan Terperinci

Dalam bidang manipulasi data, selalunya perlu melakukan operasi yang kompleks pada tatasusunan berbilang dimensi. Satu senario sedemikian melibatkan penggulungan baris matriks secara bebas, berdasarkan nilai anjakan yang disediakan.

Memandangkan matriks input A dan tatasusunan nilai anjakan r, tugasnya adalah untuk menggunakan operasi guling pada setiap baris A menggunakan anjakan yang sepadan daripada r. Hasil yang diinginkan ialah:

[[0 0 4]
 [1 2 3]
 [0 5 0]]

Pengindeksan lanjutan menyediakan penyelesaian yang elegan untuk cabaran ini. Dengan memanfaatkan nilai anjakan negatif dan teknik penghirisan tatasusunan lanjutan, anda boleh melaksanakan operasi guling dengan cekap seperti berikut:

<code class="python">rows, column_indices = np.ogrid[:A.shape[0], :A.shape[1]]

# Always use a negative shift, so that column_indices are valid.
# Alternative: r %= A.shape[1]
r[r < 0] += A.shape[1]
column_indices = column_indices - r[:, np.newaxis]

result = A[rows, column_indices]</code>

Dalam pendekatan ini, ogrid menjana grid indeks yang sepadan dengan baris dan lajur A. Dengan memanipulasi indeks lajur berdasarkan nilai anjakan negatif, operasi guling digunakan dengan berkesan pada setiap baris. Kaedah ini menawarkan penyelesaian yang sangat cekap untuk melancarkan baris matriks secara bebas, mengelakkan keperluan untuk gelung.

Atas ialah kandungan terperinci Bagaimana untuk Menggulung Baris Matriks Secara Bebas Menggunakan Pengindeksan Lanjutan?. 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