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

DDD
Lepaskan: 2024-10-21 13:40:03
asal
390 orang telah melayarinya

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

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!