Home >Backend Development >Python Tutorial >How to Efficiently Roll Matrix Rows with Advanced Numpy Indexing?
Problem Statement:
Given a matrix and an array of roll values, the task is to roll each row of the matrix independently according to the corresponding roll values. For example:
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 using Numpy Advanced Indexing:
An efficient approach to rolling matrix rows independently is to leverage Numpy's advanced indexing capabilities:
<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>
Explanation:
This approach allows efficient and concise row rolling, bypassing explicit for loops and utilizing Numpy's powerful vectorized operations. Whether it is the fastest method depends on the array dimensions and specific system configuration.
The above is the detailed content of How to Efficiently Roll Matrix Rows with Advanced Numpy Indexing?. For more information, please follow other related articles on the PHP Chinese website!