Skip to main content
 首页 » 编程设计

python之这个切片是什么意思[:, :, 0]

2025年05月04日22zhujiabin

我正在努力理解 this code

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

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

任何帮助将不胜感激

请您参考如下方法:

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

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

相当于:

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

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

在图像处理的上下文中,图像通常是维度为 w × h 的 3d 数组(假设它有颜色) × 3(三个颜色 channel )。所以在这里它意味着 flow[:,:,0] 将生成一个 w × h view where for每个像素,我们选择红色 channel (假设红色 channel 是第一个 channel )。

所以如果 flow 是一个 5 × 4 × 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]]]) 

然后我们将为每个三元组获取第一个元素,使其成为:

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

请注意这些是 View :如果您更改flow,它将对fx 和fy <产生影响< code> 也是 ,即使您以前做过这些作业也是如此。