2017-08-07 82 views
1

我想了解this code这个切片是什么意思[:,:,0]?

我无法理解这条线正在做什么。流变量是一个流向量的阵列,每个像素在图像中都有一个(所以是二维数组)。

fx, fy = flow[:, :, 0], flow[:, :, 1]

任何帮助,将不胜感激

+5

请参阅[numpy slicing](https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html)。 –

+0

我已经阅读过它,并且我认为它说它会返回维度为N-1的相应子数组,但我不太明白这意味着什么,并且想知道是否有人可以用不同的方式解释它? – cageyKJ

回答

5

让我们先简化的表达。您的代码:

fx, fy = flow[:, :, 0], flow[:, :, 1] 

等同于:

fx = flow[:, :, 0] 
fy = flow[:, :, 1] 

所以现在把它归结于什么flow[:, :, 0]。这意味着flow是一个numpy阵列至少有三个维度(让我们定义N作为维数)。然后flow[:,:,0]是一个N-1维数组,我们总是选择0作为第三维。

图像处理的上下文中,图像通常是一个三维阵列(给定其具有颜色)与维度w × h × 3(三个颜色通道)。因此,这意味着flow[:,:,0]将生成w × h查看其中对于每个像素,我们选择红色通道(给定红色通道是第一个通道)。

所以如果flow是一个5 3矩阵,如:

>>> flow 
array([[[ 0, 1, 2], 
     [ 3, 4, 5], 
     [ 6, 7, 8], 
     [ 9, 10, 11]], 

     [[12, 13, 14], 
     [15, 16, 17], 
     [18, 19, 20], 
     [21, 22, 23]], 

     [[24, 25, 26], 
     [27, 28, 29], 
     [30, 31, 32], 
     [33, 34, 35]], 

     [[36, 37, 38], 
     [39, 40, 41], 
     [42, 43, 44], 
     [45, 46, 47]], 

     [[48, 49, 50], 
     [51, 52, 53], 
     [54, 55, 56], 
     [57, 58, 59]]]) 

然后我们将获得用于每个3元组的第一个元素,使得它:

>>> flow[:,:,0] 
array([[ 0, 3, 6, 9], 
     [12, 15, 18, 21], 
     [24, 27, 30, 33], 
     [36, 39, 42, 45], 
     [48, 51, 54, 57]]) 

和由查询flow[:,:,1],我们获得:

>>> flow[:,:,1] 
array([[ 1, 4, 7, 10], 
     [13, 16, 19, 22], 
     [25, 28, 31, 34], 
     [37, 40, 43, 46], 
     [49, 52, 55, 58]]) 

记住,这些观点:如果你改变flow,它将产生影响力的fxfy以及,即使你以前做这些任务。