zoukankan      html  css  js  c++  java
  • numpy数组 拼接

    转载自:https://blog.csdn.net/zyl1042635242/article/details/43162031

    数组拼接方法一

    首先将数组转成列表,然后利用列表的拼接函数append()、extend()等进行拼接处理,最后将列表转成数组。

    例1:

    >>> import numpy as np
    >>> a=np.array([1,2,5])
    >>> b=np.array([10,12,15])
    >>> a_list=list(a)
    >>> b_list=list(b)

    >>> a_list.extend(b_list)

    >>> a_list
    [1, 2, 5, 10, 12, 15]
    >>> a=np.array(a_list)
    >>> a
    array([ 1,  2,  5, 10, 12, 15])

    该方法只适用于简单的一维数组拼接,由于转换过程很耗时间,对于大量数据的拼接一般不建议使用。

    数组拼接方法二

    思路:numpy提供了numpy.append(arr, values, axis=None)函数。对于参数规定,要么一个数组和一个数值;要么两个数组,不能三个及以上数组直接append拼接。append函数返回的始终是一个一维数组。

    示例2:

    >>> a=np.arange(5)
    >>> a
    array([0, 1, 2, 3, 4])
    >>> np.append(a,10)
    array([ 0,  1,  2,  3,  4, 10])
    >>> a
    array([0, 1, 2, 3, 4])

    >>> b=np.array([11,22,33])
    >>> b
    array([11, 22, 33])
    >>> np.append(a,b)
    array([ 0,  1,  2,  3,  4, 11, 22, 33])

    >>> a
    array([[1, 2, 3],
           [4, 5, 6]])
    >>> b=np.array([[7,8,9],[10,11,12]])
    >>> b
    array([[ 7,  8,  9],
           [10, 11, 12]])
    >>> np.append(a,b)
    array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])

    numpy的数组没有动态改变大小的功能,numpy.append()函数每次都会重新分配整个数组,并把原来的数组复制到新数组中。

    数组拼接方法三

    思路:numpy提供了numpy.concatenate((a1,a2,...), axis=0)函数。能够一次完成多个数组的拼接。其中a1,a2,...是数组类型的参数

    示例3:

    >>> a=np.array([1,2,3])
    >>> b=np.array([11,22,33])
    >>> c=np.array([44,55,66])
    >>> np.concatenate((a,b,c),axis=0)  # 默认情况下,axis=0可以不写
    array([ 1,  2,  3, 11, 22, 33, 44, 55, 66]) #对于一维数组拼接,axis的值不影响最后的结果

    >>> a=np.array([[1,2,3],[4,5,6]])
    >>> b=np.array([[11,21,31],[7,8,9]])
    >>> np.concatenate((a,b),axis=0)
    array([[ 1,  2,  3],
           [ 4,  5,  6],
           [11, 21, 31],
           [ 7,  8,  9]])

    >>> np.concatenate((a,b),axis=1)  #axis=1表示对应行的数组进行拼接
    array([[ 1,  2,  3, 11, 21, 31],
           [ 4,  5,  6,  7,  8,  9]])

    对numpy.append()和numpy.concatenate()两个函数的运行时间进行比较

    示例4:

    >>> from time import clock as now
    >>> a=np.arange(9999)
    >>> b=np.arange(9999)
    >>> time1=now()
    >>> c=np.append(a,b)
    >>> time2=now()
    >>> print time2-time1
    28.2316728446
    >>> a=np.arange(9999)
    >>> b=np.arange(9999)
    >>> time1=now()
    >>> c=np.concatenate((a,b),axis=0)
    >>> time2=now()
    >>> print time2-time1
    20.3934997107

    可知,concatenate()效率更高,适合大规模的数据拼接

      

    奇怪,我为啥和他的不一样

  • 相关阅读:
    [翻译]跟我一起边译边学之Linux:目录
    [翻译]跟我一起边译边学之Linux:致谢 Acknowledgments
    计算机图形学资源收集01
    计算机图形学资源收集02
    计算机图形学资源收集04
    计算机图形学资源收集03
    C#二十几种设计模式事例下载(源码)
    在WinForm应用程序中嵌入WPF控件
    .net网站与Winform窗体的数据交互(JS调用Winform后台方法实现)
    C#调用rar.exe解压一个rar文件
  • 原文地址:https://www.cnblogs.com/bafenqingnian/p/8992843.html
Copyright © 2011-2022 走看看