opencv中axis(轴)概念的理解

目录

1.一维数组的axis(轴)

 2.二维数组的axis(轴)

 3.三维数组的axis(轴)

4.总结


在opencv的学习过程,很多同学对轴的概念会感到困惑,今天我们就来弄清楚它。

对某个轴进行操作,就是沿着轴的方向操作。

1.一维数组的axis(轴)

让我们先从最简单的一维数组来理解轴。

如下图所示,该一维数组只有一个轴,即轴0,数组元素的索引沿轴的方向依次增加。

#对于一味数组
a= np.array([1,2,3])
suma = np.sum(a)                 #suma = 9,未指定轴时,就是对数组所有元素进行操作
sum0 = np.sum(a,axis=0)     #sum1 = 9   指定轴时,沿着指定轴的方向求和

2.二维数组的axis(轴)

下面是二维数组,沿着不同的轴进行聚合(求和、求最大值、求最小值)的处理类似,下面演示的是求和操作。

  

 #对于二味数组,沿着某个轴聚合,就是将其他轴索引相同,但聚合的那个轴的索引值不同的原酸进行聚合
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
suma = np.sum(a)         #suma = 78
sum0 = np.sum(a,axis=0)  #sum0 = [15,18,21,24]  沿着轴0的方向求和
sum1 = np.sum(a,axis=1)  #sum1 = [10,26,42]   沿着轴1的方向求和

 3.三维数组的axis(轴)

下面是三维数组,下面演示的是求和操作。

如下图所示,轴0为Z轴,轴1为y轴,轴0 为x轴

 #二维数组的聚合
a=np.array([[[1,2,3],[4,5,6],[7,8,9]],[[11,12,13],[14,15,16],[17,18,19]],[[21,22,23],[24,25,26],[27,28,29]]])

#suma = 78 未指定轴时,就是对数组所有元素进行操作
suma = np.sum(a)        

#sum0 = 78 按轴0方向进行求和,结果只保留其他练个维度[[33,36,39],[42.45.48].[51.54.57]]
sum0 = np.sum(a,axis=0)  

#sum1 = 78 按轴1方向进行求和,结果只保留其他练个维度[[12,15,18],[42.45.48].[72.75.78]
sum1 = np.sum(a,axis=1)  

 #sum2 = 78 按轴2方向进行求和,结果只保留其他练个维度[[6,15,24],[36.45.54].[66.75.84]
sum2 = np.sum(a,axis=2)

4.总结

 对于多维数组   a[i][[][k],第一个下标就是轴0,第二个下标就是轴1,....,第n个下标就是轴n-1

对某个轴操作,

1)产生的结果数组的shape:该轴消失,只留下其他的轴,

例如 对 a[2][3][4] 进行求和(或者求最大值、最小值等)

若axis = 0 ,那么结果数组的形状为 a[3][4]

若axis = 1 ,那么结果数组的形状为 a[2][4]

若axis = 2 ,那么结果数组的形状为 a[2][3]

2)操作结果是沿着指定的轴操作

若axis = 0 ,那么结果数组的对应元素值的计算 例如 a[0][0]=a[0][0][0] + a[1][0][0] + a[2][0][0]

若axis = 1 ,那么结果数组的对应元素值的计算 例如 a[1][2]=a[1][0][2] + a[1][1][2] + a[1][2][2]

若axis = 2 ,那么结果数组的对应元素值的计算 例如 a[2][0]=a[2][0][0]+ a[2][0][1] + a[2][0][2]

也就是说,要计算某个a[j][k]的计算结果,是将原数组中其他轴与j,k索引值一致,而聚合轴上索引值遍历得到的所有元素的计算结果,

#关于多维数组的理解
#我们用一个数组来存储一个蜜雪冰城店铺的单品(冰激凌、圣代、奶茶、其他)的销售额
sale=np.array([1,2,3])
#随着我们系统的发展,我们开了4个分店,需要存储(1分店,2分店,3分店,4分店)的成绩
sale2=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
#后来,我们的生意又拓展了外地(广州,深圳)
sale3 =np.array([[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],[[61,62,63],[64,65,66],[67,68,69],[70,71,72]]])
#那么此时score3[0][1][2]就表示广州1分店圣代的销售额
#也就是 轴0表示地区,轴1表示是分店 轴2表示产品的销售额
#当我们希望汇总不同地区的相应分店的各个产品的销售额时,那么我们就用轴0进行汇总
print("sale3=",sale3)
sum0 = np.sum(sale3,axis=0)
print("sum0 = np.sum(score3,axis=0) 结果\n",sum0)
sum1 = np.sum(sale3,axis=1)
print("sum1 = np.sum(score3,axis=1) 结果\n",sum1)
sum2 = np.sum(sale3,axis=1)
print("sum1 = np.sum(score3,axis=2) 结果\n",sum2)

 聪明的你,现在是不是已经明白了呢?

猜你喜欢

转载自blog.csdn.net/caohongxing/article/details/120249261