• 售前

  • 售后

热门帖子
入门百科

numpy数组合并和矩阵拼接的实现

[复制链接]
明月照大江754 显示全部楼层 发表于 2021-10-26 13:27:33 |阅读模式 打印 上一主题 下一主题
Numpy中提供了concatenate,append, stack类(包括hsatck、vstack、dstack、row_stack、column_stack),r_和c_等类和函数用于数组拼接的使用。

各种函数的特点和区别如下标:
      concatenate      提供了axis参数,用于指定拼接方向                  append      默认先ravel再拼接成一维数组,也可指定axis              stack      提供了axis参数,用于天生新的维度              hstack      水平拼接,沿着行的方向,对列进行拼接              vstack      垂直拼接,沿着列的方向,对行进行拼接              dstack      沿着第三个轴(深度方向)进行拼接              column_stack      水平拼接,沿着行的方向,对列进行拼接              row_stack      垂直拼接,沿着列的方向,对行进行拼接              r_      垂直拼接,沿着列的方向,对行进行拼接              c_      水平拼接,沿着行的方向,对列进行拼接   
直接归并


将两个一维数组归并成一个二维数组:
  1. import torch
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. a = np.arange(0,15,0.1)
  5. b = 1.088 * a + 0.638 + np.random.rand() * 10
  6. print(a.shape,b.shape)
  7. points = np.array([a,b])
  8. print(points.shape)
  9. (150,) (150,)
  10. (2, 150)
复制代码
append拼接

  1. append(arr, values, axis=None)
复制代码
arr待归并的数组的复制(特殊主页是复制,以是要多泯灭很多内存)
values用来归并到上述数组复制的值。假如指定了下面的参数axis的话,则这些值必须和arr的shape同等(shape[axis]之外都相称),否则的话,则没有要求。
axis要归并的轴.
  1. >>> import numpy as np
  2. >>> ar1 = np.array([[1,2,3], [4,5,6]])
  3. >>> ar2 = np.array([[7,8,9], [11,12,13]])
  4. >>> np.append(ar1, ar2) # 先ravel扁平化再拼接,所以返回值为一个1维数组
  5. array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13])
  6. >>> np.append(ar1, ar2, axis=0)  # 沿第一个轴拼接,这里为行的方向
  7. array([[ 1, 2, 3],
  8.   [ 4, 5, 6],
  9.   [ 7, 8, 9],
  10.   [11, 12, 13]])
  11. >>> np.append(ar1, ar2, axis=1)  # 沿第二个轴拼接,这里为列的方向
  12. array([[ 1, 2, 3, 7, 8, 9],
  13.   [ 4, 5, 6, 11, 12, 13]])
复制代码
concatenate拼接

  1. concatenate(a_tuple, axis=0, out=None)
复制代码
a_tuple:对需要归并的数组用元组的形式给出
axis待归并的轴,默以为0
  1. >>> import numpy as np
  2. >>> ar1 = np.array([[1,2,3], [4,5,6]])
  3. >>> ar2 = np.array([[7,8,9], [11,12,13]])
  4. >>> ar1
  5. array([[1, 2, 3],
  6.   [4, 5, 6]])
  7. >>> ar2
  8. array([[ 7, 8, 9],
  9.   [11, 12, 13]])
  10. >>> np.concatenate((ar1, ar2)) # 这里的第一轴(axis 0)是行方向
  11. array([[ 1, 2, 3],
  12.   [ 4, 5, 6],
  13.   [ 7, 8, 9],
  14.   [11, 12, 13]])
  15. >>> np.concatenate((ar1, ar2),axis=1) # 这里沿第二个轴,即列方向进行拼接
  16. array([[ 1, 2, 3, 7, 8, 9],
  17.   [ 4, 5, 6, 11, 12, 13]])
  18. >>> ar3 = np.array([[14,15,16]]) # shape为(1,3)的2维数组
  19. >>> np.concatenate((ar1, ar3)) # 一般进行concatenate操作的array的shape需要一致,当然如果array在拼接axis方向的size不一样,也可以完成
  20. >>> np.concatenate((ar1, ar3)) # ar3虽然在axis0方向的长度不一致,但axis1方向上一致,所以沿axis0可以拼接
  21. array([[ 1, 2, 3],
  22.   [ 4, 5, 6],
  23.   [14, 15, 16]])
  24. >>> np.concatenate((ar1, ar3), axis=1) # ar3和ar1在axis0方向的长度不一致,所以报错
复制代码
hstack

  1. >>> np.hstack((ar1,ar2)) # 水平拼接,沿着行的方向,对列进行拼接
  2. array([[ 1, 2, 3, 7, 8, 9],
  3.   [ 4, 5, 6, 11, 12, 13]])
复制代码
vstack

  1. >>> np.vstack((ar1,ar2)) # 垂直拼接,沿着列的方向,对行进行拼接
  2. array([[ 1, 2, 3],
  3.   [ 4, 5, 6],
  4.   [ 7, 8, 9],
  5.   [11, 12, 13]])
复制代码
vstack

  1. >>> np.dstack((ar1,ar2)) # 对于2维数组来说,沿着第三轴(深度方向)进行拼接, 效果相当于stack(axis=-1)
  2. array([[[ 1, 7],
  3.   [ 2, 8],
  4.   [ 3, 9]],
  5.   [[ 4, 11],
  6.   [ 5, 12],
  7.   [ 6, 13]]])
复制代码
column_stack和row_stack

  1. >>> np.column_stack((ar1,ar2)) # 水平拼接,沿着行的方向,对列进行拼接
  2. array([[ 1, 2, 3, 7, 8, 9],
  3.   [ 4, 5, 6, 11, 12, 13]])
  4. >>> np.row_stack((ar1,ar2)) # 垂直拼接,沿着列的方向,对行进行拼接
  5. array([[ 1, 2, 3],
  6.   [ 4, 5, 6],
  7.   [ 7, 8, 9],
  8.   [11, 12, 13]])
复制代码
np.r_ 和np.c_


常用于快速天生ndarray数据
  1. >>> np.r_[ar1,ar2]  # 垂直拼接,沿着列的方向,对行进行拼接
  2. array([[ 1, 2, 3],
  3.   [ 4, 5, 6],
  4.   [ 7, 8, 9],
  5.   [11, 12, 13]])
  6. >>> np.c_[ar1,ar2] # 水平拼接,沿着行的方向,对列进行拼接
  7. array([[ 1, 2, 3, 7, 8, 9],
  8.   [ 4, 5, 6, 11, 12, 13]])
复制代码
到此这篇关于numpy数组归并和矩阵拼接的实现的文章就先容到这了,更多相关numpy数组归并和矩阵拼接内容请搜刮脚本之家从前的文章或继续欣赏下面的相关文章渴望各人以后多多支持脚本之家!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作