Python numpy 入门系列 22 合并ndarray
  TnD0WQEygW8e 2023年11月02日 21 0


 

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://www.codenong.com/cs105209851/

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

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

 



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
TnD0WQEygW8e