Comment dérouler efficacement les lignes matricielles avec l'indexation Numpy avancée ?

DDD
Libérer: 2024-10-21 13:40:03
original
391 Les gens l'ont consulté

How to Efficiently Roll Matrix Rows with Advanced Numpy Indexing?

Déroulement efficace des lignes matricielles avec l'indexation avancée Numpy

Énoncé du problème :

Étant donné une matrice et un tableau de valeurs de rouleau , la tâche consiste à lancer chaque ligne de la matrice indépendamment en fonction des valeurs de lancer correspondantes. Par exemple :

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]]
Copier après la connexion

Solution utilisant l'indexation avancée Numpy :

Une approche efficace pour faire défiler les lignes de la matrice de manière indépendante consiste à exploiter les capacités d'indexation avancées de 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>
Copier après la connexion

Explication :

  • Créez une grille d'indices à l'aide de np.ogrid qui représente les lignes et les colonnes de la matrice.
  • Ajustez le rouleau valeurs pour garantir un décalage négatif, ce qui entraîne des indices de colonne valides.
  • Soustrayez les valeurs de roulement de la grille des indices de colonne, en diffusant les valeurs de roulement le long des lignes.
  • Utilisez l'indexation avancée pour récupérer les valeurs de roulement éléments de la matrice A d'origine.

Cette approche permet un déroulement de lignes efficace et concis, en contournant les boucles for explicites et en utilisant les puissantes opérations vectorisées de Numpy. Que ce soit la méthode la plus rapide dépend des dimensions du réseau et de la configuration spécifique du système.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!