ホームページ >バックエンド開発 >Python チュートリアル >高度なインデックス作成を使用して行列の行を個別にローリングするにはどうすればよいですか?
データ操作の領域では、多くの場合、多次元配列に対して複雑な操作を実行する必要があります。このようなシナリオの 1 つは、指定されたシフト値に基づいて行列の行を個別にローリングすることです。
入力行列 A とシフト値 r の配列が与えられた場合、タスクは A の各行にロール演算を適用することです。 r からの対応するシフトを使用します。望ましい結果は次のとおりです。
[[0 0 4] [1 2 3] [0 5 0]]
高度なインデックス作成は、この課題に対する洗練されたソリューションを提供します。負のシフト値と高度な配列スライス手法を活用することで、次のようにロール操作を効率的に実装できます。
<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>
このアプローチでは、ogrid は A の行と列に対応するインデックスのグリッドを生成します。負のシフト値に基づいて列インデックスを操作すると、ロール操作が各行に効果的に適用されます。この方法は、行列の行を個別にローリングするための非常に効率的なソリューションを提供し、ループの必要性を回避します。
以上が高度なインデックス作成を使用して行列の行を個別にローリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。