numpy之 axis的值对数组array操作的影响(np.stack, np.reshape, np.argmax)

看了一些别人写的关于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 = np.stack(a,axis=2) #这是才能指定axis=2; 相当于一维数组里面的axis=1进行纵向的合并(其实相当于针对二维数组    axis=1 的stack之后再进行了列表的纵向的合并,然后合成了一个数组)
>>> 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]])





猜你喜欢

转载自blog.csdn.net/qq_17172467/article/details/79769498
今日推荐