Python numpy 入门系列 22 合并ndarray

 

 

 

ndarray的合并

定义要使用的数据源

 

    a = np.array([1, 1, 1])
    b = np.array([2, 2, 2])    
    print('a', a)
    print('b', b)

    <class 'numpy.ndarray'>
    a [1 1 1]
    b [2 2 2]


numpy.vstack()函数


语法:vstack(tup),参数是一个元组,它可将元组中指定的数组进行合并

    # 将a与b合并
    c = np.vstack((a, b))
    print('合并结果:\n', c)
    print('c的形状:\n', c.shape)


    合并结果:
     [[1 1 1]
     [2 2 2]]
    c的形状:
     (2, 3)

从结果来看,两个一维数组合并后的结果是一个二维数组

 


numpy.hstack()函数

语法:hstack(tup),参数是一个元组
与 vstack不同的是,vstack将数组进行纵向合并,而hstack将数组进行横向合并
vstack 是 vertical stack 的缩写
hstack 是 horizontal stack 的缩写

    # 将a与b合并
    c = np.hstack((a, b))
    print('合并结果:\n', c)
    print('c的形状:\n', c.shape)

    合并结果:
     [1 1 1 2 2 2]
    c的形状:
     (6,)

可以看出,两个一维数组对象横向合并后,还是一个一维的序列,不过,元素的个数是被合并数组元素个数之和
将a或b行转成列

 

  a = a.T
    print(a)


    [1 1 1]

上面的方式是无法将a进行行转列的,原因是a是个一维数组,它根本就没有列,正确的方式是:

    c = a.reshape((3, 1))
    print(c)


    [[1]
     [1]
     [1]]

重新定义形状后,现在a是一个3行1列的矩阵,即一个二维数据

思考:a.reshape()是将a所指向的数组的形状改变了吗?再来查看a

    print(a)
    [1 1 1]

实际上,a.reshape()只是创建了一个a的副本,然后将该副本的内存地址赋给了变量c,而a变量所指向的数组还是原来的对象


newaxis属性


还有另外一组方式可以改变a的形状,也是返回一个 ;axis表示“轴”的意思

    # 在行上增加一个维度(增加一个轴)
    c = a[np.newaxis, :]
    print(c)
    print(c.shape)    
    print('-'*15)    
    # 在列上增加一个维度
    c = a[:, np.newaxis]
    print(c)
    print(c.shape)


    [[1 1 1]]
    (1, 3)
    ---------------
    [[1]
     [1]
     [1]]
    (3, 1)

可以看出,返回的新对象的维度都已经发生了变化,在列方向上增加维度以后,将原先的一维数组变成了纵向的二维数组

    _a = a[:, np.newaxis]
    _b = b[:, np.newaxis]
     
    c = np.hstack((_a, _b))
    print(c)


    [[1 2]
     [1 2]
     [1 2]]

也可以将同一个对象进行合并

   

print(np.hstack((_a, _a, _b, _b)))

 


    [[1 1 2 2]
     [1 1 2 2]
     [1 1 2 2]]


concatenate()

 

也可以将数组进行合并,通过axis可以指定合并的方向

    # 横向合并
    c = np.concatenate((_a, _a, _b, _b), axis=1)
    # 纵向合并
    d = np.concatenate((_a,_b), axis=0)
     
    print(c)
    print('-'*10)
    print(d)

 


    [[1 1 2 2]
     [1 1 2 2]
     [1 1 2 2]]
    ----------
    [[1]
     [1]
     [1]
     [2]
     [2]

————————————————
REF

链接:https://blog.csdn.net/shipeng1022/article/details/107069140

 

 

https://www.codenong.com/cs105209851/

http://c.biancheng.net/view/7209.html

http://www.zzvips.com/article/174390.html

 

posted @ 2023-02-02 20:21  emanlee  阅读(903)  评论(0编辑  收藏  举报