私は3つの4x4配列(行列)を作成しました: arr=np.linspace(1,48,48).reshape(3,4,4)
行列は次のように表示されます。`
[[[ 1. 2. 3. 4.]
[ 5. 6. 7. 8.]
[ 9. 10. 11. 12.]
[13. 14. 15. 16.]]
[[17. 18. 19. 20.]
[21. 22. 23. 24.]
[25. 26. 27. 28.]
[29. 30. 31. 32.]]
[[33. 34. 35. 36.]
[37. 38. 39. 40.]
[41. 42. 43. 44.]
[45. 46. 47. 48.]]]`
特定の出力を取得するためにインデックス作成/スプライシングを実行したいと思います。例:
[[36. 35.] [40. 39.] [44. 43.] [48. 47.]]
[[13. 9. 5. 1.] [29. 25. 21. 17.] [45. 41. 37. 33.]]
[[25. 26. 27. 28.], [29. 30. 31. 32.], [33. 34. 35. 36.], [37. 38. 39. 40.]]
4*. [[1. 4.] [45. 48.]]
私はそれにどのようにアプローチするかについて正確に苦労しています。特定のマトリックスを操作するとき、私はそのマトリックスにアクセスし、そこからスプライス/インデックスを作成しようとしました。たとえば、出力[[36。35。] [40。39。] [44。43。] [48。47.]]は3番目のマトリックスにあります。私はこのようにマトリックスにアクセスしますmatrix3 = arr[array([2])]
現在、私は3番目のマトリックスの行と列のみを操作しており、正しくスライスするのが難しいと感じています。matrix3[::-1,::-1]
列と行の両方を反転する必要がありますか?はいの場合、これはそれにアプローチするための最良の方法ですか?代わりに、reshapeを使用する必要があり、3つの4x4配列すべてでreshapeを使用する必要がありますか、それとも操作するマトリックスにアクセスしてからreshapeを使用する必要がありますか?
編集:4を追加しました。
最初の結果を段階的に抽出します。
In [53]: arr[2,:,:] # the desired plane
Out[53]:
array([[33, 34, 35, 36],
[37, 38, 39, 40],
[41, 42, 43, 44],
[45, 46, 47, 48]])
In [54]: arr[2,:,2:] # the desired columns
Out[54]:
array([[35, 36],
[39, 40],
[43, 44],
[47, 48]])
In [55]: arr[2,:,:1:-1] # the reversed order
Out[55]:
array([[36, 35],
[40, 39],
[44, 43],
[48, 47]])
または、簡単な場合は、別の手順として逆に実行します。
In [56]: arr[2,:,2:][:,::-1]
Out[56]:
array([[36, 35],
[40, 39],
[44, 43],
[48, 47]])
In [57]: arr[:,:,0] # select column
Out[57]:
array([[ 1, 5, 9, 13],
[17, 21, 25, 29],
[33, 37, 41, 45]])
In [58]: arr[:,::-1,0] # reverse
Out[58]:
array([[13, 9, 5, 1],
[29, 25, 21, 17],
[45, 41, 37, 33]])
In [59]: arr[:,::-1,0].T # transpose
Out[59]:
array([[13, 29, 45],
[ 9, 25, 41],
[ 5, 21, 37],
[ 1, 17, 33]])
これは少し注意が必要です。1つの平面に最後の2行、別の平面に最初の2行が必要です。私たちはペアリング、正しい形状にブロードキャストするインデックスのペアが必要であることを取得する1
と[2,3]
など
In [61]: arr[[[1],[2]],[[2,3],[0,1]],:]
Out[61]:
array([[[25, 26, 27, 28],
[29, 30, 31, 32]],
[[33, 34, 35, 36],
[37, 38, 39, 40]]])
これは3Dマトリックスです。それを2Dに減らす1つの方法は、連結することです。
In [63]: np.concatenate(arr[[[1],[2]],[[2,3],[0,1]],:],axis=0)
Out[63]:
array([[25, 26, 27, 28],
[29, 30, 31, 32],
[33, 34, 35, 36],
[37, 38, 39, 40]])
形状変更も同様に機能します。
In [65]: arr[[[1],[2]],[[2,3],[0,1]],:].reshape(4,4)
Out[65]:
array([[25, 26, 27, 28],
[29, 30, 31, 32],
[33, 34, 35, 36],
[37, 38, 39, 40]])
また arr.reshape(3,2,2,4)[[1,2],[1,0],:].reshape(4,4)
これらのインデックス式は、スライスを含むタプルとして記述できます。例:
In [66]: idx = (2, slice(None), slice(None,1,-1))
In [67]: arr[idx]
Out[67]:
array([[36, 35],
[40, 39],
[44, 43],
[48, 47]])
したがって、一般的なツールには、インデックス作成(スライス、スカラー、リストを使用)、反転(-1ステップ)、転置(またはスワップ軸)、および再形成が含まれます。これらの1つだけですべてを行うことはできません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加