看了一些别人写的关于np.stack的博客,都很浅显,基本上都是一维数组,二维数组只有解释没有例子,看的云里雾里;
今天碰到二维的大数据量的数组应用np.stack,有点蒙,就用python命令行自己定义了数组,尝试了一下,看看它的功能和 不同axis的区别。
1.对于 a, b是一个一维数组 np.stack()
>>> a =np.array((1,2,3))
>>> b = np.array((4,5,6))
>>> np.stack((a,b)) #相当于axis=0
array([[1, 2, 3],
[4, 5, 6]])
>>> np.stack((a,b), axis = 1)
array([[1, 4],
[2, 5],
[3, 6]])
2.对于a有两个一维数组
>>> a =[np.array((1,2,3)),np.array((7,8,9))]
>>> a
[array([1, 2, 3]), array([7, 8, 9])] #stack时不能指定axis=2,因为 a 是由两个一维数组组成;
>>> np.stack(a, axis = 1)
array([[1, 7],
[2, 8],
[3, 9]])
3.对于列表a有两个二位数组
>>> a =[np.array([1,2,3],[1,2,3]),np.array([7,8,9],[7,8,9])]
>>>a
[array([[1, 2, 3],
[1, 2, 3]]), array([[7, 8, 9],
[7, 8, 9]])]
>>> np.stack(a, axis = 0)
array([[[1, 2, 3],
[1, 2, 3]],
[[7, 8, 9],
[7, 8, 9]]])
>>> np.stack(a, axis = 1)
array([[[1, 2, 3],
[7, 8, 9]],
[[1, 2, 3],
[7, 8, 9]]]) # 穿插的合并
>>> b
array([[[1, 7],
[2, 8],
[3, 9]],
[[1, 7],
[2, 8],
[3, 9]]])
>>> b.reshape([-1,2])
array([[1, 7],
[2, 8],
[3, 9],
[1, 7],
[2, 8],
[3, 9]]) #相当于数组里面的两个列表合并成了一个列表,指定的参数“-1”表示行数未知,2表示列数
#以上变化就能看出规律,一维数组和二维数组的差别(对应于axis)。
4. np.argmax():
>>> a
array([[0, 1, 2],
[3, 4, 5]])
>>> np.argmax(a, axis=0)#0代表列 找到最大的,记录它的行号索引
array([1, 1, 1])
>>> np.argmax(a, axis=1)#1代表行 找到最大的,记录它的列号索引
array([2, 2])
最后上一个大型的二位数组:
1.
>>> box_centers_y
array([[ 0, 0, 0, ..., 0, 0, 0],
[ 0, 0, 0, ..., 0, 0, 0],
[ 0, 0, 0, ..., 0, 0, 0],
...,
[1016, 1016, 1016, ..., 1016, 1016, 1016],
[1016, 1016, 1016, ..., 1016, 1016, 1016],
[1016, 1016, 1016, ..., 1016, 1016, 1016]])
>>> box_centers_x
array([[ 0, 0, 0, ..., 0, 0, 0],
[ 4, 4, 4, ..., 4, 4, 4],
[ 8, 8, 8, ..., 8, 8, 8],
...,
[1008, 1008, 1008, ..., 1008, 1008, 1008],
[1012, 1012, 1012, ..., 1012, 1012, 1012],
[1016, 1016, 1016, ..., 1016, 1016, 1016]])
2.
>>> box_centers = np.stack([box_centers_y, box_centers_x],axis=2) #注意这里把两个数组用“[]”变成了包含两个二维数组的列表;
>>> box_centers
array([[[ 0, 0],
[ 0, 0],
[ 0, 0],
...,
[ 0, 0],
[ 0, 0],
[ 0, 0]],
[[ 0, 4],
[ 0, 4],
[ 0, 4],
...,
[ 0, 4],
[ 0, 4],
[ 0, 4]],
[[ 0, 8],
[ 0, 8],
[ 0, 8],
...,
[ 0, 8],
[ 0, 8],
[ 0, 8]],
...,
[[1016, 1008],
[1016, 1008],
[1016, 1008],
...,
[1016, 1008],
[1016, 1008],
[1016, 1008]],
[[1016, 1012],
[1016, 1012],
[1016, 1012],
...,
[1016, 1012],
[1016, 1012],
[1016, 1012]],
[[1016, 1016],
[1016, 1016],
[1016, 1016],
...,
[1016, 1016],
[1016, 1016],
[1016, 1016]]])
3.
>>> box_centers = box_centers.reshape([-1,2])
>>> box_centers
array([[ 0, 0],
[ 0, 0],
[ 0, 0],
...,
[1016, 1016],
[1016, 1016],
[1016, 1016]])