详解Numpy.hstack + numpy.split / numpy.hsplit 进阶用法与差异探究

目录

np.hstack()

例子:

np.hsplit()

例子:

下面用split()重点讲下 indices_or_sections的用法

例子:


np.hstack()

首先,hstack在tensorflow的是数据操作中经常用到,用来对自定义数据进行堆叠的reshape操作

官方文档如上

翻译:“按水平顺序堆叠数组(按列排列)。这相当于沿着第二个轴(x轴)进行连接,除了一维数组是沿着第一个轴(y轴)进行连接。重新构建被hsplit分割的数组。”

来看下参数:

可以传入单个和多个序列

例子:

挺简单的,就是在每一水平方向上(每一行)把不同的元素连接在一起

对于python list类型使用hstack的效果只是起到转化为ndarray的作用

 

np.hsplit()

很明显就是在水平方向做分割,父类函数肯定是split

例子:

#较低维的数组

>>> x = np.arange(16.0).reshape(4, 4)
>>> x
array([[ 0.,   1.,   2.,   3.],
       [ 4.,   5.,   6.,   7.],
       [ 8.,   9.,  10.,  11.],
       [12.,  13.,  14.,  15.]])
>>> np.hsplit(x, 2)
[array([[  0.,   1.],
       [  4.,   5.],
       [  8.,   9.],
       [12.,  13.]]),
 array([[  2.,   3.],
       [  6.,   7.],
       [10.,  11.],
       [14.,  15.]])]

# 这种情况split会说
>>> np.hsplit(x, np.array([3, 6]))
[array([[ 0.,   1.,   2.],
       [ 4.,   5.,   6.],
       [ 8.,   9.,  10.],
       [12.,  13.,  14.]]),
 array([[ 3.],
       [ 7.],
       [11.],
       [15.]]),
 array([], shape=(4, 0), dtype=float64)]

# 高维数组也一样(可以理解为降维到2维情况再处理,见下图)
# With a higher dimensional array the split is still along the second axis.
>>> x = np.arange(8.0).reshape(2, 2, 2)
>>> x
array([[[0.,  1.],
        [2.,  3.]],
       [[4.,  5.],
        [6.,  7.]]])
>>> np.hsplit(x, 2)
[array([[[0.,  1.]],
       [[4.,  5.]]]),
 array([[[2.,  3.]],
       [[6.,  7.]]])]

上面例子高维数组的情况:

下面用split()重点讲下 indices_or_sections的用法

1.如果只传入一个整数值,那么就是沿着第三个参数axis指定的方向去平均的切开数组(奇数列,奇数行的情况见下)

2.如果传入的是一个一维数组或者sorted integer(排序后的整数),,这两个是等价的,会按照分片的法则进行分片

例子:

>>> x = np.arange(9.0)
>>> np.split(x, 3)
[array([0.,  1.,  2.]), array([3.,  4.,  5.]), array([6.,  7.,  8.])]

>>>
>>> x = np.arange(8.0)
>>> np.split(x, [3, 5, 6, 10])
[array([0.,  1.,  2.]),
 array([3.,  4.]),
 array([5.]),
 array([6.,  7.]),
 array([], dtype=float64)]

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值