NumPy 数组的组合和拆分操作

NumPy数组操作

一、数组的组合

1. numpy.concatenate((a1, a2, ...), axis=0, out=None, dtype=None, casting="same_kind")

参数:

  • a1, a2, ...:sequence of array_like,除了将被对应的轴之外,数组必须是相同的形状;
  • axis:int, optional,将被组合的轴,默认为0,如果为None,将被展开为一维数组;
  • out:ndarray, optional,如果给定,将存放结果,尺寸必须匹配;
  • dtype:str or dtype,给定输出的数据类型,不能和参数 out 一起出现;
  • casting:{‘no’, ‘equiv’, ‘safe’, ‘same_kind’, ‘unsafe’}, optional,控制可能发生的数据转换类型。默认为 ‘same_kind’;

结果:

  • res:组合后的数组;
# 数组的简单连接
>>> a = np.array([[1, 2], [3, 4]])
>>> b = np.array([[5, 6]])
>>> print(a, b)
[[1 2]
 [3 4]] [[5 6]]

>>> np.concatenate((a, b), axis=0)
array([[1, 2],
       [3, 4],
       [5, 6]])
>>>  np.concatenate((a, b.T), axis=1)
array([[1, 2, 5],
       [3, 4, 6]])
>>> np.concatenate((a, b), axis=None)
array([1, 2, 3, 4, 5, 6])

2. numpy.stack(arrays, axis=0, out=None)

参数:

  • arrays:sequence of array_like,数组必须是相同的形状;
  • axis:int, optional,数组组合的轴;
  • out:ndarray, optional,如果给定,将存放结果,尺寸必须匹配;

结果:

  • stacked:ndarray,使用新轴连接数组;
>>> arrays = [np.random.randn(3, 4) for _ in range(10)]
>>> np.stack(arrays, axis=0).shape
(10, 3, 4)
>>> np.stack(arrays, axis=1).shape
(3, 10, 4)

>>> a = np.array([1, 2, 3])
>>> b = np.array([4, 5, 6])
>>> np.stack((a, b))
array([[1, 2, 3],
        [4, 5, 6]])
>>> np.stack((a, b), axis=1)
array([[1, 4],
        [2, 5],
        [3, 6]])
>>> np.stack((a, b), axis=-1)
array([[1, 4],
        [2, 5],
        [3, 6]])

3. numpy.column_stack(tup)

参数:

  • tup:sequence of 1-D or 2-D arrays,数组不信有相同尺寸的第一维;

结果:

  • stacked:2-D array,将给定的数组按列连接为二维数组;
>>> a = np.array([(1,2,3),(1,2,3)])
>>> b = np.array((3,4))
>>> np.column_stack((a,b))
array([[1, 2, 3, 3],
       [1, 2, 3, 4]])

4. numpy.dstack(tup)

参数:

  • tup:sequence of arrays,数组除第三维外,形状相同;

结果:

  • stacked:ndarray,将给定的数组连接为三维数组;
>>> a = np.array((1,2,3))
>>> b = np.array((2,3,4))
>>> np.dstack((a,b))
array([[[1, 2],
        [2, 3],
        [3, 4]]])

5. numpy.hstack(tup)

参数:

  • tup:sequence of arrays,数组除第二维外,形状相同;

结果:

  • stacked:ndarray,水平(按列)顺序堆叠数组,将给定的数组连接的数组;
>>> a = np.array((1,2,3))
>>> b = np.array((4,5,6))
>>> np.hstack((a,b))
array([1, 2, 3, 4, 5, 6])

>>> a = np.array([[1],[2],[3]])
>>> b = np.array([[4],[5],[6]])
>>> np.hstack((a,b))
array([[1, 4],
       [2, 5],
       [3, 6]])

6. numpy.vstack(tup)

参数:

  • tup:sequence of arrays,数组除第一维外,形状相同;

结果:

  • stacked:ndarray,垂直(行)顺序堆叠数组,将给定的数组连接的数组;
>>> a = np.array((1,2,3))
>>> b = np.array((4,5,6))
>>> np.hstack((a,b))
array([[1, 2, 3],
       [4, 5, 6]])

>>> a = np.array([[1],[2],[3]])
>>> b = np.array([[4],[5],[6]])
>>> np.hstack((a,b))
array([[1],
       [2],
       [3],
       [4],
       [5],
       [6]])

7. numpy.block(arrays)

参数:

  • arrays:nested list of array_like or scalars,如果传递了单个ndarray或scalar(深度为0的嵌套列表),则返回时不会修改(也不会复制),元素形状必须沿适当的轴匹配(无需广播),但将根据需要在形状前面加上前导1,以使尺寸匹配;

结果:

  • block_array:ndarray,块组装的数组;
# 块数组
>>> A = np.eye(2) * 2
>>> B = np.eye(3) * 3
>>> np.block([
	    [A,               np.zeros((2, 3))],
	    [np.ones((3, 2)), B               ]
	])
array([[2., 0., 0., 0., 0.],
       [0., 2., 0., 0., 0.],
       [1., 1., 3., 0., 0.],
       [1., 1., 0., 3., 0.],
       [1., 1., 0., 0., 3.]])

二、数组的拆分

1. numpy.split(ary, indices_or_sections, axis=0)

参数:

  • ary:ndarray,被划分的数组;
  • indices_or_sections:int or 1-D array,如果是 int,将被划分为N个对应维度等长的数组,如果是 1-D array,表示数组的拆分位置;
  • axis:int, optional,拆分的维度,默认0;

返回:

  • sub-arrays:list of ndarrays,数组 ary 的子数组视图的列表;
>>> x = np.arange(20.0).reshape(10, 2)
>>> np.split(x, 5)
[array([[0., 1.],
        [2., 3.]]),
 array([[4., 5.],
        [6., 7.]]),
 array([[ 8.,  9.],
        [10., 11.]]),
 array([[12., 13.],
        [14., 15.]]),
 array([[16., 17.],
        [18., 19.]])]

>>> np.split(x, [2, 5, 7])
[array([[0., 1.],
        [2., 3.]]),
 array([[4., 5.],
        [6., 7.],
        [8., 9.]]),
 array([[10., 11.],
        [12., 13.]]),
 array([[14., 15.],
        [16., 17.],
        [18., 19.]])]

2. numpy.array_split(ary, indices_or_sections, axis=0)

几乎等同于 numpy.split

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值