文档章节

Numpy中stack(),vstack(), hstack()函数区别及使用

Amui
 Amui
发布于 2018/01/03 23:15
字数 804
阅读 2488
收藏 0

1. stack()函数
函数原型为:stack(arrays, axis=0),arrays可以传数组和列表。

import numpy as np
a=[[[1,2,3,4],[11,21,31,41]],
   [[5,6,7,8],[51,61,71,81]],
   [[9,10,11,12],[91,101,111,121]]]
print("列表a如下:")
print(a)

print("新维度的下标为0")
c=np.stack(a,axis=0)
print(c)

print("新维度的下标为1")
c=np.stack(a,axis=1)
print(c)

print("新维度的下标为2")
c=np.stack(a,axis=2)
print(c)
列表a如下:
[[[1, 2, 3, 4], [11, 21, 31, 41]], [[5, 6, 7, 8], [51, 61, 71, 81]], [[9, 10, 11, 12], [91, 101, 111, 121]]]
新维度的下标为0
[[[  1   2   3   4]
  [ 11  21  31  41]]

 [[  5   6   7   8]
  [ 51  61  71  81]]

 [[  9  10  11  12]
  [ 91 101 111 121]]]
新维度的下标为1
[[[  1   2   3   4]
  [  5   6   7   8]
  [  9  10  11  12]]

 [[ 11  21  31  41]
  [ 51  61  71  81]
  [ 91 101 111 121]]]
新维度的下标为2
[[[  1   5   9]
  [  2   6  10]
  [  3   7  11]
  [  4   8  12]]

 [[ 11  51  91]
  [ 21  61 101]
  [ 31  71 111]
  [ 41  81 121]]]

个人理解:

其中原数组a的shape为(3,2,4),即是一个三维数组。有3个维度。其中每个元素的都有一个索引。比如数字1的索引为[0,0,0],2的索引为[0,0,1],31的是[0,1,2],41的是[0,1,3],....5的是[1, 0,0], .8的是[1,0,3].9的索引是[2,0,0],等等。

其中,stack(a, axis=0),axis的值不能大于等于数组的维度。axis=0时,元素的索引值不变,仍是原来的索引,每个维度上的值不变,方向不变。

stack(a, axis=1), 个人理解,就是将数组中元素第0个维度的数值换到第1维度。如31就由[0,1,2]变为[1,0,2],41就由[0,1,3]变为[1,0,3], 8就由[1,0,3]变为[0,1,3],以此类推。所以数组的shape就变为了(2,3,4)

stack(a, axis=2) , 就是将数组中每个元素的第0个维度的索引值移到第2维度,原先的第1,第2维的索引值一起前移。如31就由[0,1,2]变为[1,2,0],41就由[0,1,3]变为[1,3,0],8就由[1,0,3]变为[0,3,1],以此类推。所以数组的shape就变为了(2,4,3)

 

2. hstack()函数

a = np.array([1,2,3])  
b = np.array([4,5,6])
c=[[[1,2,3,4],[11,21,31,41]],
   [[5,6,7,8],[51,61,71,81]],
   [[9,10,11,12],[91,101,111,121]]]
print('一维数组:')
print(np.hstack((a,b)))

a = np.array([[1],[2],[3]])
b = np.array([[4],[5],[6]])
print('二维数组:')
print(np.hstack((a,b)))

a = np.array([[[1],[11]],
              [[2],[21]],
              [[3],[31]]])

b = np.array([[[4],[41]],
              [[5],[51]],
              [[6],[61]]])
print('三维数组:')
print(np.hstack((a,b)))

print('三维数组2:')
print(np.hstack(c))
一维数组:
[1 2 3 4 5 6]
二维数组:
[[1 4]
 [2 5]
 [3 6]]
三维数组:
[[[ 1]
  [11]
  [ 4]
  [41]]

 [[ 2]
  [21]
  [ 5]
  [51]]

 [[ 3]
  [31]
  [ 6]
  [61]]]
三维数组2:
[[  1   2   3   4   5   6   7   8   9  10  11  12]
 [ 11  21  31  41  51  61  71  81  91 101 111 121]]

未完待续。

3. vstack()函数

a = np.array([1,2,3])  
b = np.array([4,5,6])
c=[[[1,2,3,4],[11,21,31,41]],
   [[5,6,7,8],[51,61,71,81]],
   [[9,10,11,12],[91,101,111,121]]]
print('一维数组:')
print(np.vstack((a,b)))

a = np.array([[1],[2],[3]])  
b = np.array([[4],[5],[6]])
print('二维数组:')
print(np.vstack((a,b)))

a = np.array([[[1],[11]],
              [[2],[21]],
              [[3],[31]]])

b = np.array([[[4],[41]],
              [[5],[51]],
              [[6],[61]]])
print('三维数组:')
print(np.vstack((a,b)))

print('三维数组2:')
print(np.vstack(c))
一维数组:
[[1 2 3]
 [4 5 6]]
二维数组:
[[1]
 [2]
 [3]
 [4]
 [5]
 [6]]
三维数组:
[[[ 1]
  [11]]

 [[ 2]
  [21]]

 [[ 3]
  [31]]

 [[ 4]
  [41]]

 [[ 5]
  [51]]

 [[ 6]
  [61]]]
三维数组2:
[[  1   2   3   4]
 [ 11  21  31  41]
 [  5   6   7   8]
 [ 51  61  71  81]
 [  9  10  11  12]
 [ 91 101 111 121]]

未完待续。

© 著作权归作者所有

Amui
粉丝 5
博文 78
码字总数 40874
作品 0
广州
程序员
私信 提问
Python中stack(),vstack(),hstack()的用法和区别

这三个函数有些相似性,都是堆叠数组,里面最难理解的应该就是stack()函数了,我查阅了numpy的官方文档,在网上又看了几个大牛的博客,发现他们也只是把numpy文档的内容照搬,看完后还是不能...

qq_39521554
2018/05/27
0
0
一篇文章掌握Numpy的基本用法

使用numpy进行向量化运算 从上面的运行结果可以看出,numpy的向量化运算的效率要远远高于python的循环遍历运算(效率相差好几百倍)。 (1ms=1000µs) 2 创建ndarray数组 首先需要导入numpy...

dby_freedom
2018/10/14
0
0
搭建模型第一步:你需要预习的NumPy基础都在这了

  选自 Numpy   机器之心编译   参与:Floney、思源      NumPy 是一个为 Python 提供高性能向量、矩阵和高维数据结构的科学计算库。它通过 C 和 Fortran 实现,因此用向量和矩阵建...

机器之心
2018/07/01
0
0
机器学习系列(三)——Numpy数组与矩阵

Numpy.array基本操作 生成一个数组 生成一个矩阵 基本属性 查看x数据维度out: 返回一个元组,查看具体大小out: 返回x中数据个数out: 查看y数据维度out: 返回一个元组,查看具体大小out: 返回...

Ice_spring
06/07
0
0
python数据分析之NUMPY基础03

首先,需要构造两个数组: 组合数据: 水平组合(采用hstack或concatenate函数): 垂直组合(采用vstack或concatenate函数): 深度组合:就是将一系列数组沿着纵轴方向进行层叠组合。 列组...

指尖跳动的精灵
2015/03/23
67
0

没有更多内容

加载失败,请刷新页面

加载更多

记一次项目启动报java.lang.StackOverflowError

项目是spring boot,之前没有问题,突然有一次debug方式启动的时候报这个错误。 因为其他同事没有问题,线上也没有问题,所以先排除了是代码问题。 开始以为电脑开的软件太多,然后给jvm的内存...

chro008
26分钟前
12
0
idea 2019.2免费激活码

亲测有效到2020.6 812LFWMRSH-eyJsaWNlbnNlSWQiOiI4MTJMRldNUlNIIiwibGljZW5zZWVOYW1lIjoi5q2j54mIIOaOiOadgyIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb......

Iverson58
34分钟前
9
0
移动APP开发中的重要注意事项

您的移动app在变化吗?如果没有,请确保遵循这些提示进行移动app开发。大多数行业的IT领导者都优先考虑劳动力和消费者的移动性。实现成功的移动app开发具有挑战性,涉及在app功能开发的基础上...

a429011717
41分钟前
6
0
Qt编写自定义控件69-代码行数统计

一、前言 代码行数统计主要用来统计项目中的所有文件的代码行数,其中包括空行、注释行、代码行,可以指定过滤拓展名,比如只想统计.cpp的文件,也可以指定文件或者指定目录进行统计。写完这...

飞扬青云
59分钟前
12
0
驰骋工作流引擎-ccflow关于 “ 是否自动计算未来的处理人”的功能变更

关键字:流程未来节点处理人 工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流 业务背景:一个流程在启动起来后,是可以对一些节点计算出来处理人是谁,流程的走向。对于另...

孟娟
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部