numpy.stackの最も通俗的な理解
16412 ワード
numpy.stack(arrays, axis=0)
新しい軸に沿って配列のシーケンスを接続します.
axisパラメータは、結果寸法における新しい軸のインデックスを指定します.例えば、
axis=0
の場合、それは最初の次元であり、axis=-1
の場合、それは最後の次元である.上は公式に与えられた解釈で、理解しにくい.
私たちはまず次元を増やすことから話します.
>>> a = np.array([1, 2, 3])
>>> b = np.array([2, 3, 4])
>>> a.shape
(3,)
>>> b.shape
(3,)
>>> np.stack((a, b), axis=0).shape
(2, 3)
>>> np.stack((a, b), axis=1).shape
(3, 2)
(2,3)
と(3,2)
のうち2
はどうやって来たのか、a
とb
の2つのarray
があるからです.ここでc= np.array([3, 4, 5])
を追加すると、ここでは元のnp.stack
を変更すると、次のようになります.>>> c = np.array([3, 4, 5])
>>> np.stack((a, b, c), axis=0).shape
(3, 3)
>>> np.stack((a, b, c), axis=1).shape
(3, 3)
ではここは
a,b,c
の3つのarray
なので、ここ2
は3
になりました次に、この
axis
パラメータの意味を説明すると、ここのaxis
はどの次元を追加するか、例えばここのaxis=0
は、第1の次元を増加するので、ここの(2,3)
の2
は第1の位置にあることが理解できる.axis=1
は、第2の次元を増加させるので、ここでの(3,2)
の2
は第2の位置にある.ちょっと複雑な例を挙げます
>>> a = np.array([[1, 2, 3], [1, 2, 3], [1, 2, 3]])
>>> b = np.array([[4, 5, 6], [4, 5, 6], [4, 5, 6]])
>>> a.shape
(3, 3)
>>> b.shape
(3, 3)
>>> np.stack((a, b), axis=0).shape
(2, 3, 3)
>>> np.stack((a, b), axis=1).shape
(3, 2, 3)
>>> np.stack((a, b), axis=2).shape
(3, 3, 2)
ここで、
2
とは、a
およびb
を意味し、2
がどの位置に配置されるかは、axis
によって決定される.次に行列の座標についてお話しします
a a
[1 2 3] (0,0) (0,1) (0,2)
[1 2 3] (1,0) (1,1) (1,2)
[1 2 3] (2,0) (2,1) (2,2)
よく分かります.
次に
np.stack((a, b), axis=1)
を例にとる>>> np.stack((a, b), axis=1).shape
(3, 2, 3)
>>> np.stack((a, b), axis=1)
array([[[1, 2, 3],
[4, 5, 6]],
[[1, 2, 3],
[4, 5, 6]],
[[1, 2, 3],
[4, 5, 6]]])
私たちは
a[0][0]=1
だったが、今は真ん中に次元(ここではaxis=1
)を加えると、a[0][0][0]=1
になった.ここでなぜ真ん中が0
なのかに注意してください.np.stack((a, b), axis=1)
の中で、a
がb
の前にあるからです.同理a a
[1 2 3] (0,0,0) (0,0,1) (0,0,2)
[1 2 3] (1,0,0) (1,0,1) (1,0,2)
[1 2 3] (2,0,0) (2,0,1) (2,0,2)
では、
b[0][0]=4
は、np.stack((a, b), axis=1)
のうち、b
がa
の後ろにあるからです.だからb[0][1][0]=4
b b
[4 5 6] (0,1,0) (0,1,1) (0,1,2)
[4 5 6] (1,1,0) (1,1,1) (1,1,2)
[4 5 6] (2,1,0) (2,1,1) (2,1,2)
次に対応座標の数を組み合わせて、新しい
array
を得た
array([[[1, 2, 3], (0,0,0) (0,0,1) (0,0,2)
[4, 5, 6]], (0,1,0) (0,1,1) (0,1,2)
[[1, 2, 3], (1,0,0) (1,0,1) (1,0,2)
[4, 5, 6]], (1,1,0) (1,1,1) (1,1,2)
[[1, 2, 3], (2,0,0) (2,0,1) (2,0,2)
[4, 5, 6]]]) (2,1,0) (2,1,1) (2,1,2)
もう一つのもっと簡単な理解方法(積み重ね)
axis=1
に対して、横に切って、対応する行は横に積み上げていますaxis=2
については、縦に切り分け、対応行に縦に積み上げますaxis=0
については、切らないで、2つの山が一緒にあります.こんなに簡単なんだよ!
いいと思うから、いいねb( ̄▽ ̄)d