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
猜你喜欢
- WAP站点,这似乎是一个有点落伍的东西。在诞生之初,它很简陋,只能通过一个叫WML的标记语言来搭建没有任何美感的文字+链接页面。而今,绝大部
- 前言最近项目中遇到一个用于监控日志文件的Python包pyinotify,结合自己的项目经验和网上的一些资料总结一下,总的原理是利用pyin
- 偶然看到 Tanel Poder 提到的一个 Metalink Note (438452.1): Performance Tools Qui
- XML是一个精简的SGML,它将SGML的丰富功能与HTML的易用性结合到Web的应用中。XML保留了SGML的可扩展功能,这使XML从根本
- MySQL 客户端连接成功后,通过 show [session|global]status 命令 可以提供服务器状态信息,也可以在操作系统上
- 什么是 docopt?1、docopt 是一种 Python 编写的命令行执行脚本的交互语言。它是一种语言!它是一种语言!它是一种语言!2、
- 代码如下:登陆时记录cookies页面代码 <!--#include file="md5.asp"--&
- 大家都知道select的优先权比较高,CSS不宜控制,而且还能遮挡层的正常显示!那么我们就来模拟一个!这样样式就可以随心所欲了(若您看不到效
- 问题:数据库实际大小为600MB, 日志文件实际大小为33MB, 但日志文件占用空间为2.8GB!试了多种方式,SHIRNK DATABAS
- 代码如下: <!--[if IE 6]><script type="text/javascript"&
- 第一种:利用functools 工具处理import functoolsresult = (lambda k: functools.redu
- function GetRequest() { var
- 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2
- 近期,MSN、江民等知名网站相继受到了黑客的威胁和攻击,一时间网络上风声鹤唳。本报编辑部接到本文作者(炽天使)的电话,他详细讲述了发现国内最
- golang 1.7版本中context库被很多标准库的模块所使用,比如net/http和os的一些模块中,利用这些原生模块,我们就不需要自
- 本文的OCR当然不是自己从头开发的,是基于百度智能云提供的API(我感觉是百度在中国的人工智能领域值得称赞的一大贡献),其提供的API完全可
- 写在前面:本节主要讲述一些基本的,常用的SQL语句,而非数据库方面的基本知识。数据库方面的知识留待以后再讲,现在就我们平常常用的一些SQL语
- 1 什么是注释注释就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码。注释是编写程序时,写程序的人给一个语句、程序段、函数等的解释
- 这篇文章主要介绍了python实现括号匹配方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 记得以前的Windows任务定时是可以正常使用的,今天试了下,发现不能正常使用了,任务计划总是挂起。接下来记录下Python爬虫定时任务的几