Python 在numpy中被dstack和dsplit卡住

Python 在numpy中被dstack和dsplit卡住,python,numpy,Python,Numpy,我了解hstack、hsplit、vstack和vsplit 但我不知道dstack和dsplit是如何工作的 根据我的说法,在三维空间上连接应该意味着:> a = 1st 2D matrix b = 2nd 2D matrix c = 3rd 2D matrix d = np.dstack((a, b, c)) d[0] == a d[1] == b d[2] == c 现在,这真的意味着深度叠加,真的有意义(至少对我来说) 但事实并非如此。 请帮助我可视化dstack和dsplit 谢

我了解hstack、hsplit、vstack和vsplit 但我不知道dstack和dsplit是如何工作的

根据我的说法,在三维空间上连接应该意味着:>

a = 1st 2D matrix
b = 2nd 2D matrix
c = 3rd 2D matrix

d = np.dstack((a, b, c))

d[0] == a
d[1] == b
d[2] == c
现在,这真的意味着深度叠加,真的有意义(至少对我来说) 但事实并非如此。 请帮助我可视化dstack和dsplit

谢谢

dstack((a,b,c))
dstack(map(至少三维,[a,b,c]))相同
因此,如果您只需要了解
至少三维
的工作原理。这很简单,它只是添加了一个大小为1的第三维度:

>>> a = np.random.randn(2, 3)
>>> np.atleast_3d(a)
array([[[ -1.47499777e-04],
        [ -3.15172826e-01],
        [ -4.17205640e-01]],

       [[ -4.40166377e-01],
        [ -3.49488016e-01],
        [  1.20570170e+00]]])

我认为你的想法是对的。也就是说,想象阵列垂直堆叠

比如说:

取一系列数组,将它们垂直堆叠,形成单个数组 排列

假设a、b和c是正方形,并堆叠形成一个立方体。查看第一个维度,
d[0]
(相当于
d[0,:,:]
)将查看多维数据集的侧面,
d[:,0,:]
。第三个维度从上面看,例如
d[:,:,0]
。它有助于使用
.ndim
.shape
计算尺寸和形状的数量

举例说明:

>>> a =np.ones((3,3))
>>> b =a*2
>>> c =a*3
>>> np.dstack((a, b, c))
>>> a.shape
(3, 3)
>>> a.ndim
2
>>> d.shape
(3, 3, 3)
>>> d.ndim
3
>>> d[0,:,:]
array([[ 1.,  2.,  3.],
       [ 1.,  2.,  3.],
       [ 1.,  2.,  3.]])
>>> d[:,0,:]
array([[ 1.,  2.,  3.],
       [ 1.,  2.,  3.],
       [ 1.,  2.,  3.]])
>>> d[:,:,0]
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])
>>> d[:,:,1]
array([[ 2.,  2.,  2.],
       [ 2.,  2.,  2.],
       [ 2.,  2.,  2.]])
最后,如果要“旋转立方体”,则始终可以转置数组:

>>> d.T
array([[[ 1.,  1.,  1.],
        [ 1.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 2.,  2.,  2.],
        [ 2.,  2.,  2.],
        [ 2.,  2.,  2.]],

       [[ 3.,  3.,  3.],
        [ 3.,  3.,  3.],
        [ 3.,  3.,  3.]]])

>>> d.T[0]
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])
编辑

。。。。或者您可以使用:


这给了我一个dstack的用法…实际上不是dstack,而是dstack().T…。但我真的很好奇为什么numpy的家伙制作dstack(显然不仅仅是为了得到它的转置和使用它)。这种方法(获取dstack的转置,然后获取单个元素)对于更高的维度是无效的
>>> np.rollaxis(d,2)
array([[[ 1.,  1.,  1.],
        [ 1.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 2.,  2.,  2.],
        [ 2.,  2.,  2.],
        [ 2.,  2.,  2.]],

       [[ 3.,  3.,  3.],
        [ 3.,  3.,  3.],
        [ 3.,  3.,  3.]]])