問題ステートメント:
行列とロール値の配列が与えられた場合の場合、タスクは、対応するロール値に従って行列の各行を個別にロールすることです。例:
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]]
Numpy の高度なインデックス作成を使用したソリューション:
行列行を個別にローリングする効率的なアプローチは、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>
説明:
このアプローチにより、明示的な for ループをバイパスし、Numpy の強力なベクトル化演算を利用して、効率的かつ簡潔な行ローリングが可能になります。それが最速の方法であるかどうかは、配列の次元と特定のシステム構成によって異なります。
以上が高度な Numpy インデックスを使用して行列行を効率的にローリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。