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

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_ 水平拼接,沿着行的方向,对列进行拼接

直接合并

将两个一维数组合并成一个二维数组:

import torch
import numpy as np
import matplotlib.pyplot as plt
a = np.arange(0,15,0.1)
b = 1.088 * a + 0.638 + np.random.rand() * 10

print(a.shape,b.shape)
points = np.array([a,b])
print(points.shape)

(150,) (150,)
(2, 150)

append拼接

append(arr, values, axis=None)
arr 待合并的数组的复制(特别主页是复制,所以要多耗费很多内存)
values 用来合并到上述数组复制的值。如果指定了下面的参数axis的话,则这些值必须和arr的shape一致(shape[axis]之外都相等),否则的话,则没有要求。
axis 要合并的轴.
>>> import numpy as np
>>> ar1 = np.array([[1,2,3], [4,5,6]])
>>> ar2 = np.array([[7,8,9], [11,12,13]])

>>> np.append(ar1, ar2) # 先ravel扁平化再拼接,所以返回值为一个1维数组
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13])

>>> np.append(ar1, ar2, axis=0)  # 沿第一个轴拼接,这里为行的方向
array([[ 1, 2, 3],
  [ 4, 5, 6],
  [ 7, 8, 9],
  [11, 12, 13]])

>>> np.append(ar1, ar2, axis=1)  # 沿第二个轴拼接,这里为列的方向
array([[ 1, 2, 3, 7, 8, 9],
  [ 4, 5, 6, 11, 12, 13]])

concatenate拼接

concatenate(a_tuple, axis=0, out=None)
a_tuple: 对需要合并的数组用元组的形式给出
axis 待合并的轴,默认为0
 >>> import numpy as np
>>> ar1 = np.array([[1,2,3], [4,5,6]])
>>> ar2 = np.array([[7,8,9], [11,12,13]])
>>> ar1
array([[1, 2, 3],
  [4, 5, 6]])
>>> ar2
array([[ 7, 8, 9],
  [11, 12, 13]])

>>> np.concatenate((ar1, ar2)) # 这里的第一轴(axis 0)是行方向
array([[ 1, 2, 3],
  [ 4, 5, 6],
  [ 7, 8, 9],
  [11, 12, 13]])

>>> np.concatenate((ar1, ar2),axis=1) # 这里沿第二个轴,即列方向进行拼接
array([[ 1, 2, 3, 7, 8, 9],
  [ 4, 5, 6, 11, 12, 13]])

>>> ar3 = np.array([[14,15,16]]) # shape为(1,3)的2维数组
>>> np.concatenate((ar1, ar3)) # 一般进行concatenate操作的array的shape需要一致,当然如果array在拼接axis方向的size不一样,也可以完成
>>> np.concatenate((ar1, ar3)) # ar3虽然在axis0方向的长度不一致,但axis1方向上一致,所以沿axis0可以拼接
array([[ 1, 2, 3],
  [ 4, 5, 6],
  [14, 15, 16]])
>>> np.concatenate((ar1, ar3), axis=1) # ar3和ar1在axis0方向的长度不一致,所以报错

hstack

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

vstack

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

vstack

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

column_stack和row_stack

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

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

np.r_ 和np.c_

常用于快速生成ndarray数据

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

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

到此这篇关于numpy数组合并和矩阵拼接的实现的文章就介绍到这了,更多相关numpy数组合并和矩阵拼接内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • numpy 进行数组拼接,分别在行和列上合并的实例

    在进行数据分析的时候,会把把一些具有多个特征的样本数据进行拼接合并吗,放在一起分析,预测.... 下面是用numpy中的函数进行数组的拼接. (1)方法一.np.vstack() v 表示vertical 垂直,也就是竖着拼接 和np.hstack() h表示Horizontal 横向 (2)方法二,np.c_[array1,array2] c_表示colum列 np.r_[array1,array2] r_表示row行 以上这篇numpy 进行数组拼接,分别在行和列上合并的实例就是小编分享给大

  • 对numpy和pandas中数组的合并和拆分详解

    合并 numpy中 numpy中可以通过concatenate,指定参数axis=0 或者 axis=1,在纵轴和横轴上合并两个数组. import numpy as np import pandas as pd arr1=np.ones((3,5)) arr1 Out[5]: array([[ 1., 1., 1., 1., 1.], [ 1., 1., 1., 1., 1.], [ 1., 1., 1., 1., 1.]]) arr2=np.random.randn(15).reshape(

  • 详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)

    Numpy中提供了concatenate,append, stack类(包括hsatck.vstack.dstack.row_stack.column_stack),r_和c_等类和函数用于数组拼接的操作. 各种函数的特点和区别如下标: concatenate 提供了axis参数,用于指定拼接方向 append 默认先ravel再拼接成一维数组,也可指定axis stack 提供了axis参数,用于生成新的维度 hstack 水平拼接,沿着行的方向,对列进行拼接 vstack 垂直拼接,沿着列的

  • 详谈Numpy中数组重塑、合并与拆分方法

    1.数组重塑 1.1一维数组转变成二维数组 通过reshape( )函数即可实现,假设data是numpy.array类型的一维数组array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),现将其转变为2行5列的二维数组,代码如下: data.reshape((2,5)) 作为参数的形状的其中一维可以是-1,它表示该维度的大小由数据本身推断而来,因此上面代码等价于: data.reshape((2,-1)) 1.2二维数组转换成一维数组 将多维数组转换成一维数组的运算通常称为扁

  • 基于Python中numpy数组的合并实例讲解

    Python中numpy数组的合并有很多方法,如 - np.append() - np.concatenate() - np.stack() - np.hstack() - np.vstack() - np.dstack() 其中最泛用的是第一个和第二个.第一个可读性好,比较灵活,但是占内存大.第二个则没有内存占用大的问题. 方法一--append parameters introduction arr 待合并的数组的复制(特别主页是复制,所以要多耗费很多内存) values 用来合并到上述数组

  • Python numpy实现数组合并实例(vstack,hstack)

    若干个数组可以沿不同的轴合合并到一起,vstack,hstack的简单用法, >>> a = np.floor(10*np.random.random((2,2))) >>> a array([[ 8., 8.], [ 0., 0.]]) >>> b = np.floor(10*np.random.random((2,2))) >>> b array([[ 1., 8.], [ 0., 4.]]) >>> np.vs

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

    Numpy中提供了concatenate,append, stack类(包括hsatck.vstack.dstack.row_stack.column_stack),r_和c_等类和函数用于数组拼接的操作. 各种函数的特点和区别如下标: concatenate 提供了axis参数,用于指定拼接方向 append 默认先ravel再拼接成一维数组,也可指定axis stack 提供了axis参数,用于生成新的维度 hstack 水平拼接,沿着行的方向,对列进行拼接 vstack 垂直拼接,沿着列的

  • Numpy数组array和矩阵matrix转换方法

    1.ndarray转换成matrix import numpy as np from numpy import random,mat r_arr=random.rand(4,4) print('r_arr',r_arr) r_mat=mat(r_arr) print(r_mat.I)#求逆 运行结果: r_arr [[ 0.65603592  0.39908438  0.44722351  0.92652759]  [ 0.32357477  0.45384697  0.31687359  0.

  • numpy系列之数组合并(横向和纵向)

    目录 1.横向合并 1.1 concatenate方法 1.2 hstack方法 1.3 column_stack方法 2.纵向合并 2.1 concatenate方法 2.2 vstack方法 2.3 row_stack方法 先新建两个数组用于合并 import numpy as np arr1 = np.array([[1, 2, 3], [4, 5, 6]]) print(arr1) result: [[1 2 3]  [4 5 6]] arr2 = np.array([[7, 8, 9]

  • numpy中数组拼接、数组合并方法总结(append(), concatenate, hstack, vstack, column_stack, row_stack, np.r_, np.c_等)

    目录 零. 维度和轴 一.append() 二.concatenate 三.hstack, vstack 四.column_stack, row_stack 五. np.r_, np.c_ 六.总结 参考 总结 零. 维度和轴 Python中可以用numpy中的ndim和shape来分别查看维度,以及在对应维度上的长度.直观上可以根据符号“[ ]”的层数来判断,有m层即为m维,最外面1层对应axis0, 依次为axis1,axis2… c = np.array([[[1,2,3], [4,5,6

  • numpy数组拼接简单示例

    NumPy数组是一个多维数组对象,称为ndarray.其由两部分组成: ·实际的数据 ·描述这些数据的元数据 大部分操作仅针对于元数据,而不改变底层实际的数据. 关于NumPy数组有几点必需了解的: ·NumPy数组的下标从0开始. ·同一个NumPy数组中所有元素的类型必须是相同的. NumPy数组属性 在详细介绍NumPy数组之前.先详细介绍下NumPy数组的基本属性.NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是

  • numpy实现合并多维矩阵、list的扩展方法

    一.合并多个numpy矩阵 1.首先创建两个多维矩阵 矩阵a的大小为(2,3,2) 矩阵b的大小为(3,2,3) 采用concatentate这个函数就可以合并两个多维矩阵 合并之后应为(5,3,2) In [1]: import numpy as np In [2]: a = np.ndarray((3, 2, 3)) In [3]: b = np.ndarray((2, 2, 3)) In [4]: print(a.shape, b.shape) (3, 2, 3) (2, 2, 3) In

  • 基于Python Numpy的数组array和矩阵matrix详解

    NumPy的主要对象是同种元素的多维数组.这是一个所有的元素都是一种类型.通过一个正整数元组索引的元素表格(通常是元素是数字). 在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank,但是和线性代数中的秩不是一样的,在用python求线代中的秩中,我们用numpy包中的linalg.matrix_rank方法计算矩阵的秩,例子如下). 结果是: 线性代数中秩的定义:设在矩阵A中有一个不等于0的r阶子式D,且所有r+1阶子式(如果存在的话)全等于0,那末D称为矩阵

  • 对numpy 数组和矩阵的乘法的进一步理解

    1.当为array的时候,默认d*f就是对应元素的乘积,multiply也是对应元素的乘积,dot(d,f)会转化为矩阵的乘积, dot点乘意味着相加,而multiply只是对应元素相乘,不相加 2.当为mat的时候,默认d*f就是矩阵的乘积,multiply转化为对应元素的乘积,dot(d,f)为矩阵的乘积 3. 混合时候的情况,一般不要混合 混合的时候默认按照矩阵乘法的, multiply转化为对应元素的乘积,dot(d,f)为矩阵的乘积 总结:数组乘法默认的是点乘,矩阵默认的是矩阵乘法,混

随机推荐