搜索

查看: 3108|回复: 11

[Python] Python数据分析之堆叠数组函数示例总结

[复制链接]
发表于 2023-5-4 17:17:51 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:17:51 3108 11 看全部
目录
  • numpy 堆叠数组
  • ravel() 函数
  • stack() 函数
  • vstack()函数
  • hstack()函数
  • concatenate() 函数

    20230223083636036.png

    20230223083636036.png


    numpy 堆叠数组
    在做图像和 nlp 的数组数据处理的时候,经常需要实现两个数组堆叠或者连接的功能,这就需用到 numpy 库的一些函数,numpy 库中的常用堆叠数组函数如下:
  • stack : Join a sequence of arrays along a new axis.
  • hstack: Stack arrays in sequence horizontally (column wise).
  • vstack : Stack arrays in sequence vertically (row wise).
  • dstack : Stack arrays in sequence depth wise (along third axis).
  • concatenate : Join a sequence of arrays along an existing axis.
    ravel() 函数
    ravel() 方法可让将多维数组展平成一维数组。如果不指定任何参数,ravel() 将沿着行(第 0 维/轴)展平/拉平输入数组。
    示例代码如下:
    std_array = np.random.normal(3, 2.5, size=(2, 4))
    array1d = std_array.ravel()
    print(std_array)
    print(array1d)
    程序输出结果如下:
    [[5.68301857 2.09696067 2.20833423 2.83964393]
    [2.38957339 9.66254303 1.58419716 2.82531094]]

    [5.68301857 2.09696067 2.20833423 2.83964393 2.38957339 9.66254303 1.58419716 2.82531094]

    stack() 函数
    stack() 函数原型是 stack(arrays, axis=0, out=None),功能是沿着给定轴连接数组序列,轴默认为第0维。
    1,参数解析:
  • arrays: 类似数组(数组、列表)的序列,这里的每个数组必须有相同的shape。
  • axis: 默认为整形数据,axis决定了沿着哪个维度stack输入数组。
    2,返回:
  • stacked : ndarray 类型。The stacked array has one more dimension than the input arrays.
    实例如下:
    import numpy as np
    # 一维数组进行stack
    a1 = np.array([1, 3, 4])    # shape (3,)
    b1 = np.array([4, 6, 7])    # shape (3,)
    c1 = np.stack((a,b))
    print(c1)
    print(c1.shape)    # (2,3)
    # 二维数组进行堆叠
    a2 = np.array([[1, 3, 5], [5, 6, 9]])    # shape (2,3)
    b2 = np.array([[1, 3, 5], [5, 6, 9]])    # shape (2,3)
    c2 = np.stack((a2, b2), axis=0)
    print(c2)
    print(c2.shape)
    输出为:
    [[1 3 4] [4 6 7]]

    (2, 3)

    [[[1 3 5] [5 6 9]] [[1 3 5] [5 6 9]]] (2, 2, 3)

    可以看到,进行 stack 的两个数组必须有相同的形状,同时,输出的结果的维度是比输入的数组都要多一维的。我们拿第一个例子来举例,两个含 3 个数的一维数组在第 0 维进行堆叠,其过程等价于先给两个数组增加一个第0维,变为1*3的数组,再在第 0 维进行 concatenate() 操作:
    a = np.array([1, 3, 4])
    b = np.array([4, 6, 7])
    a = a[np.newaxis,:]
    b = b[np.newaxis,:]
    np.concatenate([a,b],axis=0)
    输出为:
    array([[1, 2, 3],       [2, 3, 4]])

    vstack()函数
    vstack函数原型是vstack(tup),功能是垂直的(按照行顺序)堆叠序列中的数组。tup是数组序列(元组、列表、数组),数组必须在所有轴上具有相同的shape,除了第一个轴。1-D arrays must have the same length.
    # 一维数组
    a = np.array([1, 2, 3])
    b = np.array([2, 3, 4])
    np.vstack((a,b))
    array([[1, 2, 3], [2, 3, 4]])

    # 二维数组
    a = np.array([[1], [2], [3]])
    b = np.array([[2], [3], [4]])
    np.vstack((a,b))
    array([[1], [2], [3], [2], [3], [4]])

    hstack()函数
    hstack()的函数原型:hstack(tup) ,参数tup可以是元组,列表,或者numpy数组,返回结果为numpy的数组。它其实就是**水平(按列顺序)**把数组给堆叠起来,与vstack()函数正好相反。举几个简单的例子:
    # 一维数组
    a = np.array([1, 2, 3])
    b = np.array([2, 3, 4])
    np.hstack((a,b))
    array([1, 2, 3, 2, 3, 4])

    # 二维数组
    a = np.array([[1], [2], [3]])
    b = np.array([[2], [3], [4]])
    np.hstack((a,b))
    array([[1, 2], [2, 3], [3, 4]])

    vstack()和hstack函数对比:
    这里的v是vertically的缩写,代表垂直(沿着行)堆叠数组,这里的h是horizontally的缩写,代表水平(沿着列)堆叠数组。 tup是数组序列(元组、列表、数组),数组必须在所有轴上具有相同的shape,除了第一个轴。

    concatenate() 函数
    concatenate()函数功能齐全,理论上可以实现上面三个函数的功能,concatenate()函数根据指定的维度,对一个元组、列表中的list或者ndarray进行连接,函数原型:
    numpy.concatenate((a1, a2, ...), axis=0)
    a = np.array([[1, 2], [3,4]])               
    b = np.array([[5, 6], [7, 8]])
    # a、b的shape为(2,2),连接第一维就变成(4,2),连接第二维就变成(2,4)
    np.concatenate((a, b), axis=0)
    array([[1, 2], [3, 4], [5, 6], [7, 8]])

    注意:axis指定的维度(即拼接的维度)可以是不同的,但是axis之外的维度(其他维度)的长度必须是相同的。注意 concatenate 函数使用最广,必须在项目中熟练掌握。
    参考资料 numpy中的hstack()、vstack()、stack()、concatenate()函数详解
    以上就是Python数据分析之堆叠数组函数示例总结的详细内容,更多关于Python堆叠数组函数的资料请关注知鸟论坛其它相关文章!
  • 回复

    使用道具 举报

    发表于 2023-6-28 20:45:46 | 显示全部楼层
    贰十岁装成熟装s 2023-6-28 20:45:46 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-29 05:46:31 | 显示全部楼层
    Gordon520 2023-6-29 05:46:31 看全部
    感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
    回复

    使用道具 举报

    发表于 2023-6-29 08:04:23 | 显示全部楼层
    向往草原403 2023-6-29 08:04:23 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    回复

    使用道具 举报

    发表于 2023-6-29 20:57:14 | 显示全部楼层
    心随674 2023-6-29 20:57:14 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    回复

    使用道具 举报

    发表于 2023-6-29 21:33:37 | 显示全部楼层
    井底燕雀傥 2023-6-29 21:33:37 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    回复

    使用道具 举报

    发表于 2023-6-30 09:40:06 | 显示全部楼层
    李志敏 2023-6-30 09:40:06 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    回复

    使用道具 举报

    发表于 2023-6-30 10:51:18 | 显示全部楼层
    冀苍鸾 2023-6-30 10:51:18 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    发表于 2023-6-30 11:13:24 | 显示全部楼层
    123456825 2023-6-30 11:13:24 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    发表于 2023-6-30 13:55:40 | 显示全部楼层
    知足常乐77 2023-6-30 13:55:40 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 知鸟论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表