np.concatenate以及dstack中的维度与深度问题

笔者最近在研究一篇代码的时候对于numpy中的concatenate函数和dstack函数产生了较多的疑惑,查看了很多相关的文章,但是感觉很多没有说清楚维度的变化,在此笔者说一下自己的见解。

当我们对三维数组使用.shape函数时,对于结果(a,b,c),有人解释为该三维数组是由a个 b行c列的二维数组组合而成(但是由np.concatenate函数而言,若axis = 2时,函数是在.shape中的第三个维度进行拼接,那么按照这个意思,是为在列上进行拼接吗?)

我们使用dstack函数在deep(深度)上拼接,例:

两个2*3的二维数组m,n

m:

[  [1,2,3]

   [3,4,5]  ]

n:

[  [5,6,7]

   [7,8,9]  ]

w = np.dstack([m,n]):

w:

[  [  [1,5]

      [2,6]

      [3,7]  ]

   [  [3,7]

      [4,8]

      [5,9]  ]  ]

最后生成的w.shape = (2,3,2)

按照上面所说的理论,w.shape的意思很显然是2个3行2列的二维数组,直观看上去也确实如此,但是按照这个说法,原有的2*3的数组形状就发生了变化,仿佛并不是在“深度”层次进行的拼接,让人实在摸不着头脑。

实际上,(2,3,2)当中,最后一个“2”才是代表了深度。也就是说,这个(2,3,2)还是由2个2行3列的数组组成。

可以解释为

c[ : , : , 0 ]:

[  [1,2,3]

   [3,4,5]  ]

c[ : , : , 1 ]:

[  [5,6,7]

   [7,8,9]  ]

如此理解,则拼接确实是沿着深度(deep)轴进行拼接的,则对于np.concatenate函数而言,axis = 2时,函数确实是在.shape中的第三个维度进行拼接的。

你可能感兴趣的:(python,机器学习,深度学习,opencv)