NumPy(六):数组堆叠:【vstack:垂直(按列顺序)堆叠数组】【hstack:水平(按列顺序)堆叠数组】【stack:axis=0/1/2】

2024-09-02 02:08

本文主要是介绍NumPy(六):数组堆叠:【vstack:垂直(按列顺序)堆叠数组】【hstack:水平(按列顺序)堆叠数组】【stack:axis=0/1/2】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先生成一些数,

import numpy as np
a = np.arange(1, 7).reshape((2, 3))
b = np.arange(7, 13).reshape((2, 3))
c = np.arange(13, 19).reshape((2, 3))print('a = \n', a)
print('b = \n', b)
print('c = \n', c)

即下面的形式
在这里插入图片描述
下面分别以不同的形式输出:

一、vstack

s = np.vstack((a, b, c))
print('vstack \n ', s.shape, '\n', s)

在竖直方向上进行堆叠,得到6×3的矩阵

在这里插入图片描述

vstack(tup):垂直(按列顺序)堆叠数组:

import numpy as np# 数组堆叠# numpy.vstack(tup):垂直(按列顺序)堆叠数组
a = np.arange(5)
b = np.arange(5, 10)
ar1 = np.vstack((a, b))
print('a = {0}, a.shape = {1}'.format(a, a.shape))
print('b = {0}, b.shape = {1}'.format(b, b.shape))
print('ar1 = {0}, ar1.shape = {1}'.format(ar1, ar1.shape))
a = np.array([[1], [2], [3]])
b = np.array([['a'], ['b'], ['c'], ['d']])
ar2 = np.vstack((a, b))  # 这里形状可以不一样
print('a = {0}, a.shape = {1}'.format(a, a.shape))
print('b = {0}, b.shape = {1}'.format(b, b.shape))
print('ar2 = {0}, ar2.shape = {1}'.format(ar2, ar2.shape))

打印结果:

a = [0 1 2 3 4], a.shape = (5,)
b = [5 6 7 8 9], b.shape = (5,)
ar1 = [[0 1 2 3 4][5 6 7 8 9]], ar1.shape = (2, 5)
--------------------------------------------------
a = [[1][2][3]], a.shape = (3, 1)
b = [['a']['b']['c']['d']], b.shape = (4, 1)
ar2 = [['1']['2']['3']['a']['b']['c']['d']], ar2.shape = (7, 1)

二、hstack

s = np.hstack((a, b, c))
print('hstack \n ', s.shape, '\n', s)

在这里插入图片描述

hstack(tup):水平(按列顺序)堆叠数组:

import numpy as np# 数组堆叠# numpy.hstack(tup):水平(按列顺序)堆叠数组
a = np.arange(5)  # a为一维数组,5个元素
b = np.arange(5, 9)  # b为一维数组,4个元素
ar1 = np.hstack((a, b))  # 注意:((a,b)),这里形状可以不一样
print('a = {0}, a.shape = {1}'.format(a, a.shape))
print('b = {0}, b.shape = {1}'.format(b, b.shape))
print('ar1 = {0}, ar1.shape = {1}'.format(ar1, ar1.shape))
print('-' * 50)
a = np.array([[1], [2], [3]])  # a为二维数组,3行1列
b = np.array([['a'], ['b'], ['c']])  # b为二维数组,3行1列
ar2 = np.hstack((a, b))  # 注意:((a,b)),这里形状必须一样
print('a = {0}, a.shape = {1}'.format(a, a.shape))
print('b = {0}, b.shape = {1}'.format(b, b.shape))
print('ar2 = {0}, ar2.shape = {1}'.format(ar2, ar2.shape))

打印结果:

a = [0 1 2 3 4], a.shape = (5,)
b = [5 6 7 8], b.shape = (4,)
ar1 = [0 1 2 3 4 5 6 7 8], ar1.shape = (9,)
--------------------------------------------------
a = [[1][2][3]], a.shape = (3, 1)
b = [['a']['b']['c']], b.shape = (3, 1)
ar2 = [['1' 'a']['2' 'b']['3' 'c']], ar2.shape = (3, 2)

三、stack

1、axis=0

在这里插入图片描述

s = np.stack((a, b, c), axis=0)
print('axis = 0 \n ', s.shape, '\n', s)

就是下面的形式

在这里插入图片描述
具体为3组2×3矩阵
在这里插入图片描述

stack(arrays, axis=0):沿着新轴连接数组的序列,形状必须一样!
重点解释axis参数的意思,假设两个数组[1 2 3]和[4 5 6],shape均为(3,0)

  • axis=0:[[1 2 3] [4 5 6]],shape为(2,3)
  • axis=1:[[1 4] [2 5] [3 6]],shape为(3,2)
import numpy as np# 数组堆叠
# numpy.stack(arrays, axis=0):沿着新轴连接数组的序列,形状必须一样!
# 重点解释axis参数的意思,假设两个数组[1 2 3]和[4 5 6],shape均为(3,0)
# axis=0:[[1 2 3] [4 5 6]],shape为(2,3)
# axis=1:[[1 4] [2 5] [3 6]],shape为(3,2)
a = np.arange(5)
b = np.arange(5, 10)
ar1 = np.stack((a, b))
ar2 = np.stack((a, b), axis=1)
print('a = {0}, a.shape = {1}'.format(a, a.shape))
print('b = {0}, b.shape = {1}'.format(b, b.shape))
print('ar1 = {0}, ar1.shape = {1}'.format(ar1, ar1.shape))
print('ar2 = {0}, ar2.shape = {1}'.format(ar2, ar2.shape))

打印结果:

a = [0 1 2 3 4], a.shape = (5,)
b = [5 6 7 8 9], b.shape = (5,)
ar1 = [[0 1 2 3 4][5 6 7 8 9]], ar1.shape = (2, 5)
ar2 = [[0 5][1 6][2 7][3 8][4 9]], ar2.shape = (5, 2)

2、axis=1

在这里插入图片描述

s = np.stack((a, b, c), axis=1)
print('axis = 1 \n ', s.shape, '\n', s)

即将每个矩阵的每一行进行堆叠,放在一个矩阵里(一行对应一个矩阵)就是下图的红色的放一起,绿色的放一起

在这里插入图片描述

3、axis=2

在这里插入图片描述

s = np.stack((a, b, c), axis=2)
print('axis = 2 \n ', s.shape, '\n', s)

即将每行的进行竖排,放在一个矩阵里(一行对应一个矩阵)
在这里插入图片描述

这篇关于NumPy(六):数组堆叠:【vstack:垂直(按列顺序)堆叠数组】【hstack:水平(按列顺序)堆叠数组】【stack:axis=0/1/2】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1128698

相关文章

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

MySQL中SQL的执行顺序详解

《MySQL中SQL的执行顺序详解》:本文主要介绍MySQL中SQL的执行顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql中SQL的执行顺序SQL执行顺序MySQL的执行顺序SELECT语句定义SELECT语句执行顺序总结MySQL中SQL的执行顺序

SpringBoot中配置文件的加载顺序解读

《SpringBoot中配置文件的加载顺序解读》:本文主要介绍SpringBoot中配置文件的加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot配置文件的加载顺序1、命令⾏参数2、Java系统属性3、操作系统环境变量5、项目【外部】的ap

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.