numpy中hstack vstack stack concatenate函数示例详解
作者:石晓文 发布时间:2023-02-22 19:39:06
大纲
本文主要介绍一下numpy中的几个常用函数,包括hstack()、vstack()、stack()、concatenate()。
1、concatenate()
我们先来介绍最全能的concatenate()函数,后面的几个函数其实都可以用concatenate()函数来进行等价操作。
concatenate()函数根据指定的维度,对一个元组、列表中的list或者ndarray进行连接,函数原型:
numpy.concatenate((a1, a2, ...), axis=0)
先来看几个例子,一个2*2的数组和一个1*2的数组,在第0维进行拼接,得到一个3*2的数组:
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
np.concatenate((a, b), axis=0)
输出为:
array([[1, 2],
[3, 4],
[5, 6]])
进一步,一个2*2的数组和一个2*1的数组,在第01维进行拼接,得到一个2*3的数组:
np.concatenate((a, b.T), axis=1)
输出为:
array([[1, 2, 5],
[3, 4, 6]])
上面两个简单的例子中,拼接的维度的长度是不同的,但是其他维度的长度必须是相同的,这也是使用concatenate()函数的一个基本原则,违背此规则就会报错,例如一个2*2的数组和一个1*2的数组,在第1维进行拼接:
np.concatenate((a, b), axis=1)
上面的代码会报错:
ValueError: all the input array dimensions except for the concatenation axis must match exactly
2、stack()
stack()函数的原型是numpy.stack(arrays, axis=0),即将一堆数组的数据按照指定的维度进行堆叠。
我们先看两个简单的例子:
a = np.array([1,2,3])
b = np.array([2,3,4])
np.stack([a,b],axis=0)
输出为:
array([[1, 2, 3],
[2, 3, 4]])
进一步:
np.stack([a,b],axis=1)
输出为:
array([[1, 2],
[2, 3],
[3, 4]])
如果换作是二维数组:
a = np.array([[1,2,3]])
b = np.array([[2,3,4]])
np.stack([a,b],axis=0)
输出为:
array([[[1, 2, 3]],
[[2, 3, 4]]])
可以看到,进行stack的两个数组必须有相同的形状,同时,输出的结果的维度是比输入的数组都要多一维的。我们拿第一个例子来举例,两个含3个数的一维数组在第0维进行堆叠,其过程等价于先给两个数组增加一个第0维,变为1*3的数组,再在第0维进行concatenate()操作:
a = np.array([1,2,3])
b = np.array([2,3,4])
a = a[np.newaxis,:]
b = b[np.newaxis,:]
np.concatenate([a,b],axis=0)
输出为:
array([[1, 2, 3],
[2, 3, 4]])
3、vstack()
vstack()的函数原型:vstack(tup) ,参数tup可以是元组,列表,或者numpy数组,返回结果为numpy的数组。它是垂直(按照行顺序)的把数组给堆叠起来。
举两个简单的例子:
a = np.array([1,2,3])
b = np.array([2,3,4])
np.vstack([a,b])
输出为:
array([[1, 2, 3],
[2, 3, 4]])
进一步:
a=[[1],[2],[3]]
b=[[1],[2],[3]]
np.vstack([a,b])
输出为:
array([[1],
[2],
[3],
[1],
[2],
[3]])
如果进行vstack的数组至少有两维,那么相当于np.concatenate([a,b],axis=0),我们通过例子进行对比:
a=[[1],[2],[3]]
b=[[1],[2],[3]]
np.concatenate([a,b],axis=0)
输出为:
array([[1],
[2],
[3],
[1],
[2],
[3]])
可以看到,跟刚才的结果是一致的,但是如果进行堆叠的两个数组只有一维,那么结果是不同的:
a = np.array([1,2,3])
b = np.array([2,3,4])
np.concatenate([a,b],axis=0)
上面得到的结果为:
array([1, 2, 3, 2, 3, 4])
4、hstack()
hstack()的函数原型:hstack(tup) ,参数tup可以是元组,列表,或者numpy数组,返回结果为numpy的数组。它其实就是水平(按列顺序)把数组给堆叠起来,与vstack()函数正好相反。举几个简单的例子:
a = np.array([1,2,3])
b = np.array([2,3,4])
np.hstack([a,b])
输出为:
array([1, 2, 3, 2, 3, 4])
进一步,对于二维数组的情形:
a=[[1],[2],[3]]
b=[[1],[2],[3]]
np.hstack([a,b])
输出为:
array([[1, 1],
[2, 2],
[3, 3]])
如果进行hstack的数组至少有两维,那么相当于np.concatenate([a,b],axis=1)
a=[[1],[2],[3]]
b=[[1],[2],[3]]
np.concatenate([a,b],axis=1)
输出跟刚才的结果是一致的
array([[1, 1],
[2, 2],
[3, 3]])
只有一维的情况下,并不等价于np.concatenate([a,b],axis=1),反而等价于np.concatenate([a,b],axis=0)。
5、tf中的stack()
tensorflow中也提供了stack函数,跟numpy中的stack函数的作用是一样的,我们通过例子来体会:
import tensorflow as tf
a = tf.convert_to_tensor([1,2,3])
b = tf.convert_to_tensor([2,3,4])
stack_ab = tf.stack([a,b])
a1 = tf.expand_dims(a,axis=0)
b1 = tf.expand_dims(b,axis=0)
concat_ab = tf.concat([a1,b1],axis=0)
with tf.Session() as sess:
print(sess.run(stack_ab))
print(sess.run(concat_ab))
输出为:
[[1 2 3]
[2 3 4]]
[[1 2 3]
[2 3 4]]
来源:http://r4.gs/887J


猜你喜欢
- 昨天在W3C看到,6月10日发布了新的 HTML 5 草案(Working Draft)。粗略的读了一下它提供的 新版本说明文档 ,作了一点
- 首先我们载入一张灰度图片,一般灰度图片像素为0-255.可以发现该图片的最大像素为254,最小像素为2。一般处理图片时会转化为double类
- Jupyter notebook 更改文件打开的默认路径第一步:修改图标- 找到 Jupyter notebook 桌面图标- 对着 Jup
- 内容摘要:FCKeditor至今已经到了2.3.1版本了,对于国内的WEB开发者来说,也基本上都已经“闻风知多少”了,很多人将其融放到自己的
- 本文实例为大家分享了JSP使用commons-fileupload实现文件上传代码,供大家参考,具体内容如下1、准备:将commons-fi
- 源码: 代码如下: <% '隐藏并修改文件的最后修改时间的aspshell '原理:通过FSO可以修改文件的属性,比
- 笔者通过一周的时间,询问了许多设计人员真实用户,以便确保这六个方面确实是大多数用户所不喜并且有非常大的概率普遍存在于众多的医疗网站之中。那么
- 1、卓越亚马逊的首页轮换图片,每刷新一次,都是随机不同的顺序显示,这样的设计解决了对于较多图片轮换而靠后的图片信息很少被看到的问题,这点对于
- 前言在MySQL中跨库查询主要分为两种情况,一种是同服务的跨库查询;另一种是不同服务的跨库查询;它们进行跨库查询是不同的,下面就具体介绍这两
- 目录简介时间分类TimestampDatetimeIndexdate_range 和 bdate_rangeorigin格式化PeriodD
- 在我供职的公司不仅仅拥有Oracle数据库,同时还拥有SQL Server数据库,所以我经常遇见人们向我提两种问题。 第一种通常都是以&qu
- 前言只有Innodb和myisam存储引擎能用全文索引(innodb支持全文索引是从mysql5.6开始的)char、varchar、tex
- 一、抛出异常和自定义异常Python中使用用异常对象(exception object)表示异常情况,当程序运行遇到错误后,就会触发发异常。
- 在处理数据的时候,经常会碰到CSV类型的文件,下面将介绍如何读取当前目录下的CSV文件,步骤如下1、获取当前目录所有的CSV文件名称:#创建
- 本文实例讲述了Python面向对象之继承和多态用法。分享给大家供大家参考,具体如下:Python 类的继承和多态Python 类的继承在OO
- 1.文本string:通用字符串操作re:正则表达式操作difflib:差异计算工具textwrap:文本填充unicodedata:Uni
- 对于目前众多的验证码解决方案来说,这个API有着中国电信这个重量级的运营商为靠山,应该是比较靠谱的了,而且还是免费的。详细情况请参阅:htt
- 本文涵盖了一个简单的C实现的搜索引擎的搭建始末。我通常使用SQL Server和C #,但我教C/C++的朋友要远离微软。在过去
- 问题描述我在flask程序中,启动了另一个python程序-test.py:os.system('nohup python /opt
- 上一篇博文,我们已经顺利的从cnodejs.org请求到了数据,但是大家可以注意到我们的/src/api/index.js的第一句就是://