Maison  >  Article  >  développement back-end  >  Comment effectuer un roulement indépendant des lignes matricielles à l'aide de l'indexation avancée dans NumPy ?

Comment effectuer un roulement indépendant des lignes matricielles à l'aide de l'indexation avancée dans NumPy ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-21 14:15:02328parcourir

How to Perform Independent Rolling of Matrix Rows Using Advanced Indexing in NumPy?

Rolling Matrix Rows indépendamment à l'aide de l'indexation avancée

Étant donné une matrice A et un tableau r contenant des valeurs de roll pour chaque ligne, votre objectif est de faites rouler chaque ligne de A indépendamment en utilisant ces valeurs de lancer.

L'approche la plus efficace pour y parvenir consiste à utiliser l'indexation avancée dans NumPy. Cette technique consiste à construire une nouvelle grille de maillage qui applique les valeurs de roulement aux colonnes de A. Voici comment vous pouvez l'implémenter :

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

# Define the matrix A and roll values r
A = np.array([[4, 0, 0],
              [1, 2, 3],
              [0, 0, 5]])
r = np.array([2, 0, -1])

# Create a meshgrid of rows and negative shifted columns
rows, column_indices = np.ogrid[:A.shape[0], :A.shape[1]]
r[r < 0] += A.shape[1]
column_indices = column_indices - r[:, np.newaxis]

# Use advanced indexing to apply the roll values
result = A[rows, column_indices]

# Print the result
print(result)</code>

Cette approche utilise des indices de colonne décalés négatifs pour garantir une indexation valide et applique les valeurs de roulement à travers la grille maillée, ce qui donne une matrice avec des lignes roulées indépendamment.

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!

Déclaration:
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