2017-08-07 158 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以及,即使你以前做這些任務。