Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Melancarkan Baris Matriks dengan Cekap dengan Pengindeksan Numpy Lanjutan?

Bagaimana untuk Melancarkan Baris Matriks dengan Cekap dengan Pengindeksan Numpy Lanjutan?

DDD
DDDasal
2024-10-21 13:40:03470semak imbas

How to Efficiently Roll Matrix Rows with Advanced Numpy Indexing?

Gelokan Baris Matriks Cekap dengan Pengindeksan Lanjutan Numpy

Pernyataan Masalah:

Diberikan matriks dan susunan nilai gulungan , tugasnya adalah untuk menggulung setiap baris matriks secara bebas mengikut nilai gulungan yang sepadan. Contohnya:

A = np.array([[4, 0, 0],
              [1, 2, 3],
              [0, 0, 5]])

r = np.array([2, 0, -1])

expected_result = np.array([np.roll(row, x) for row,x in zip(A, r)])

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

Penyelesaian menggunakan Pengindeksan Lanjutan Numpy:

Pendekatan cekap untuk melancarkan baris matriks secara bebas ialah memanfaatkan keupayaan pengindeksan lanjutan Numpy:

<code class="python">import numpy as np

rows, column_indices = np.ogrid[:A.shape[0], :A.shape[1]]

# Ensure negative shift to keep column_indices valid
r[r < 0] += A.shape[1]
column_indices = column_indices - r[:, np.newaxis]

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

Penjelasan:

  • Buat grid indeks menggunakan np.ogrid yang mewakili baris dan lajur matriks.
  • Laraskan gulungan nilai untuk memastikan anjakan negatif, menghasilkan indeks lajur yang sah.
  • Tolak nilai gulungan daripada grid indeks lajur, siarkan nilai gulungan sepanjang baris.
  • Gunakan pengindeksan lanjutan untuk mendapatkan semula yang digulung elemen daripada matriks asal A.

Pendekatan ini membolehkan penggulungan baris yang cekap dan ringkas, memintas eksplisit untuk gelung dan menggunakan operasi vektor berkuasa Numpy. Sama ada kaedah terpantas bergantung pada dimensi tatasusunan dan konfigurasi sistem tertentu.

Atas ialah kandungan terperinci Bagaimana untuk Melancarkan Baris Matriks dengan Cekap dengan Pengindeksan Numpy 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