Maison  >  Article  >  développement back-end  >  Comment faire défiler les lignes de la matrice indépendamment à l'aide de l'indexation avancée ?

Comment faire défiler les lignes de la matrice indépendamment à l'aide de l'indexation avancée ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-21 14:11:30674parcourir

How to Roll Matrix Rows Independently Using Advanced Indexing?

Rolling Matrix Rows indépendamment avec une indexation avancée

Dans le domaine de la manipulation de données, il est souvent nécessaire d'effectuer des opérations complexes sur des tableaux multidimensionnels. Un de ces scénarios consiste à faire rouler les lignes d'une matrice indépendamment, en fonction des valeurs de décalage fournies.

Étant donné une matrice d'entrée A et un tableau de valeurs de décalage r, la tâche consiste à appliquer l'opération de roulement à chaque ligne de A. en utilisant le décalage correspondant de r. Le résultat souhaité est :

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

L'indexation avancée offre une solution élégante à ce défi. En tirant parti des valeurs de décalage négatives et des techniques avancées de découpage de tableau, vous pouvez implémenter efficacement l'opération de roulage comme suit :

<code class="python">rows, column_indices = np.ogrid[:A.shape[0], :A.shape[1]]

# Always use a negative shift, so that column_indices are valid.
# Alternative: r %= A.shape[1]
r[r < 0] += A.shape[1]
column_indices = column_indices - r[:, np.newaxis]

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

Dans cette approche, ogrid génère une grille d'indices correspondant aux lignes et aux colonnes de A. Par en manipulant les indices de colonne sur la base des valeurs de décalage négatives, l'opération de roulement est effectivement appliquée à chaque ligne. Cette méthode offre une solution très efficace pour dérouler indépendamment les lignes de la matrice, évitant ainsi le besoin de boucles.

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