本篇内容主要讲解“numpy中hstack、vstack、stack和concatenate函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“numpy中hstack、vstack、st
本篇内容主要讲解“numpy中hstack、vstack、stack和concatenate函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“numpy中hstack、vstack、stack和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
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]])
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])
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)。
Tensorflow中也提供了stack函数,跟numpy中的stack函数的作用是一样的,我们通过例子来体会:
import tensorflow as tfa = 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]]
到此,相信大家对“numpy中hstack、vstack、stack和concatenate函数怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
--结束END--
本文标题: numpy中hstack、vstack、stack和concatenate函数怎么使用
本文链接: https://lsjlt.com/news/349871.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0