numpy中的dstack和dsplit无法解决问题

2024-06-26 18:00:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我懂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

谢谢!在


Tags: gt可视化npmatrix事实意义dstackhstack
2条回答

dstack((a,b,c))与{}相同,因此如果您只需要了解atleast_3d是如何工作的。很简单,它只是添加了尺寸为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]]])

我认为你的想法是正确的。一、 想象一下这些阵列是垂直堆叠的。。。在

就像docs说:

Take a sequence of arrays and stack them vertically to make a single array

假设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.]])

最后,如果您想“旋转立方体”,您可以始终转置数组:

^{pr2}$

编辑

。。。。或者您可以使用^{}

>>> 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.]]])

相关问题 更多 >