Maison >développement back-end >Tutoriel Python >Comment dérouler efficacement les lignes matricielles avec l'indexation Numpy avancée ?
É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]]
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>
Explication :
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!