numpy中stack和max函数的理解

1 stack

numpy 中的stack可以将一组 array 沿着某一个axis 合成一个新的array, 这个函数接受两个输入参数, 一个是一组array,这一组中的所有array需要具有相同的shape, 另个参数就是 axis, 稍后解释个人理解的axis的意义。
stack的输出是一个新的array, 这个新的array 会比原来的那组array 增加新的一维。stack是根据前面的输入参数axis 来决定沿着哪一个axis 来合成新的array。 看几个具体的例子帮助理解。

import numpy as np
a=np.arange(1, 7).reshape((2, 3))
b=np.arange(7, 13).reshape((2, 3))
c=np.arange(13, 19).reshape((2, 3))
d=np.arange(19, 25).reshape((2, 3))

(array([[1, 2, 3],
        [4, 5, 6]]),
 array([[ 7,  8,  9],
        [10, 11, 12]]),
 array([[ 7,  8,  9],
        [10, 11, 12]]),
 array([[19, 20, 21],
        [22, 23, 24]]))

我们要对上面提到的四个array 进行几个 axis=0,1,2,3 等不同维度进行组合实验

axis=0

x = np.stack([a,b,c,d], axis=0)
x
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]],

       [[13, 14, 15],
        [16, 17, 18]],

       [[19, 20, 21],
        [22, 23, 24]]])

前面提到np.stack会创建一个新的array, 这个array会比原来的array 增加新的一维, 这个增减的新的维就是第0维, [a,b,c,d]中有四个array, 所以输出的第0维的大小为4,那么输出的array的shape为423.

继续看看下面的例子:

axis=1

x = np.stack([a,b,c,d], axis=1)
x
array([[[ 1,  2,  3],
       [ 7,  8,  9],
       [13, 14, 15],
       [19, 20, 21]],

      [[ 4,  5,  6],
       [10, 11, 12],
       [16, 17, 18],
       [22, 23, 24]]])

前面提到np.stack会创建一个新的array, 这个array会比原来的array 增加新的一维, 这个增减的新的维就是第1维, [a,b,c,d]中有四个array, 所以输出的第1维的大小为4,那么输出的array的shape为243.

axis=2

x = np.stack([a,b,c,d], axis=2)
x
array([[[ 1,  7, 13, 19],
       [ 2,  8, 14, 20],
       [ 3,  9, 15, 21]],

      [[ 4, 10, 16, 22],
       [ 5, 11, 17, 23],
       [ 6, 12, 18, 24]]])

前面提到np.stack会创建一个新的array, 这个array会比原来的array 增加新的一维, 这个增减的新的维就是第2维, [a,b,c,d]中有四个array, 所以输出的第2维的大小为4,那么输出的array的shape为234.

axis=3

会直接报错的, 因为原来的array是2*3, 再增加1维, 那就是3维, 原来的array 是不不可能通过stack操作变成4维的。

x = np.stack([a,b,c,d], axis=3)
x
---------------------------------------------------------------------------
AxisError                                 Traceback (most recent call last)
Cell In[40], line 1
----> 1 x = np.stack([a,b,c,d], axis=3)
      2 x

File /data/anaconda3/yes/envs/jupyter/lib/python3.10/site-packages/numpy/core/shape_base.py:452, in stack(arrays, axis, out, dtype, casting)
    449     raise ValueError('all input arrays must have the same shape')
    451 result_ndim = arrays[0].ndim + 1
--> 452 axis = normalize_axis_index(axis, result_ndim)
    454 sl = (slice(None),) * axis + (_nx.newaxis,)
    455 expanded_arrays = [arr[sl] for arr in arrays]

AxisError: axis 3 is out of bounds for array of dimension 3

2 max

numpy 中的 max 函数接受一个array和axis, 表示沿着axis来取最大值。这样输出的结果应该比原来array小1维, 看看下面的例子。


import numpy as np
a=np.arange(1, 7).reshape((2, 3))
b=np.arange(7, 13).reshape((2, 3))
c=np.arange(13, 19).reshape((2, 3))
d=np.arange(19, 25).reshape((2, 3))
d[0][0] = -13

x = np.stack([a,b,c,d], axis=0)
y = np.max(x, axis=0)
y

array([[13, 20, 21],
       [22, 23, 24]])

这个例子先将23的四个array 合成一个 423的一个array, 然后沿着axis=0取最大值, 数据结果变成一个23的array.

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值