2つのndarrayがある場合:
a.shape # returns (200,300, 3)
b.shape # returns (200, 300)
numpy.vstack((a,b)) # Gives error
エラーを出力します:ValueError:配列は同じ数の次元を持っている必要があります
どのような作品を作ってみvstack((a.reshape(-1,300), b)
ましたが、出力がとても変です。
2つのndarrayがある場合:
a.shape # returns (200,300, 3)
b.shape # returns (200, 300)
numpy.vstack((a,b)) # Gives error
エラーを出力します:ValueError:配列は同じ数の次元を持っている必要があります
どのような作品を作ってみvstack((a.reshape(-1,300), b)
ましたが、出力がとても変です。
実際に必要な最終的な形状は指定しません。(200、300、4)の場合は、dstack
代わりに次を使用できます。
>>> import numpy as np
>>> a = np.random.random((200,300,3))
>>> b = np.random.random((200,300))
>>> c = np.dstack((a,b))
>>> c.shape
(200, 300, 4)
基本的に、スタックする場合、長さは他のすべての軸で一致する必要があります。
[コメントに基づいて更新:]
(800、300)が必要な場合は、次のように試すことができます。
>>> a = np.ones((2, 3, 3)) * np.array([1,2,3])
>>> b = np.ones((2, 3)) * 4
>>> c = np.dstack((a,b))
>>> c
array([[[ 1., 2., 3., 4.],
[ 1., 2., 3., 4.],
[ 1., 2., 3., 4.]],
[[ 1., 2., 3., 4.],
[ 1., 2., 3., 4.],
[ 1., 2., 3., 4.]]])
>>> c.T.reshape(c.shape[0]*c.shape[-1], -1)
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 2., 2., 2.],
[ 2., 2., 2.],
[ 3., 3., 3.],
[ 3., 3., 3.],
[ 4., 4., 4.],
[ 4., 4., 4.]])
>>> c.T.reshape(c.shape[0]*c.shape[-1], -1).shape
(8, 3)