脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - numpy中hstack vstack stack concatenate函数示例详解

numpy中hstack vstack stack concatenate函数示例详解

2023-03-04 13:12石晓文 Python

这篇文章主要为大家介绍了numpy中hstack vstack stack concatenate函数示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

大纲

本文主要介绍一下numpy中的几个常用函数,包括hstack()、vstack()、stack()、concatenate()。

1、concatenate()

我们先来介绍最全能的concatenate()函数,后面的几个函数其实都可以用concatenate()函数来进行等价操作。

concatenate()函数根据指定的维度,对一个元组、列表中的list或者ndarray进行连接,函数原型:

?
1
numpy.concatenate((a1, a2, ...), axis=0)

先来看几个例子,一个2*2的数组和一个1*2的数组,在第0维进行拼接,得到一个3*2的数组:

?
1
2
3
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
np.concatenate((a, b), axis=0)

输出为:

?
1
2
3
array([[1, 2],
       [3, 4],
       [5, 6]])

进一步,一个2*2的数组和一个2*1的数组,在第01维进行拼接,得到一个2*3的数组:

?
1
np.concatenate((a, b.T), axis=1)

输出为:

?
1
2
array([[1, 2, 5],
       [3, 4, 6]])

上面两个简单的例子中,拼接的维度的长度是不同的,但是其他维度的长度必须是相同的,这也是使用concatenate()函数的一个基本原则,违背此规则就会报错,例如一个2*2的数组和一个1*2的数组,在第1维进行拼接:

?
1
np.concatenate((a, b), axis=1)

上面的代码会报错:

?
1
ValueError: all the input array dimensions except for the concatenation axis must match exactly

2、stack()

stack()函数的原型是numpy.stack(arrays, axis=0),即将一堆数组的数据按照指定的维度进行堆叠。
我们先看两个简单的例子:

?
1
2
3
a = np.array([1,2,3])
b = np.array([2,3,4])
np.stack([a,b],axis=0)

输出为:

?
1
2
array([[1, 2, 3],
       [2, 3, 4]])

进一步:

?
1
np.stack([a,b],axis=1)

输出为:

?
1
2
3
array([[1, 2],
       [2, 3],
       [3, 4]])

如果换作是二维数组:

?
1
2
3
a = np.array([[1,2,3]])
b = np.array([[2,3,4]])
np.stack([a,b],axis=0)

输出为:

?
1
2
array([[[1, 2, 3]],
       [[2, 3, 4]]])

可以看到,进行stack的两个数组必须有相同的形状,同时,输出的结果的维度是比输入的数组都要多一维的。我们拿第一个例子来举例,两个含3个数的一维数组在第0维进行堆叠,其过程等价于先给两个数组增加一个第0维,变为1*3的数组,再在第0维进行concatenate()操作:

?
1
2
3
4
5
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)

输出为:

?
1
2
array([[1, 2, 3],
       [2, 3, 4]])

3、vstack()

vstack()的函数原型:vstack(tup) ,参数tup可以是元组,列表,或者numpy数组,返回结果为numpy的数组。它是垂直(按照行顺序)的把数组给堆叠起来。
举两个简单的例子:

?
1
2
3
a = np.array([1,2,3])
b = np.array([2,3,4])
np.vstack([a,b])

输出为:

?
1
2
array([[1, 2, 3],
       [2, 3, 4]])

进一步:

?
1
2
3
a=[[1],[2],[3]]
b=[[1],[2],[3]]
np.vstack([a,b])

输出为:

?
1
2
3
4
5
6
array([[1],
       [2],
       [3],
       [1],
       [2],
       [3]])

如果进行vstack的数组至少有两维,那么相当于np.concatenate([a,b],axis=0),我们通过例子进行对比:

?
1
2
3
a=[[1],[2],[3]]
b=[[1],[2],[3]]
np.concatenate([a,b],axis=0)

输出为:

?
1
2
3
4
5
6
array([[1],
       [2],
       [3],
       [1],
       [2],
       [3]])

可以看到,跟刚才的结果是一致的,但是如果进行堆叠的两个数组只有一维,那么结果是不同的:

?
1
2
3
a = np.array([1,2,3])
b = np.array([2,3,4])
np.concatenate([a,b],axis=0)

上面得到的结果为:

?
1
array([1, 2, 3, 2, 3, 4])

4、hstack()

hstack()的函数原型:hstack(tup) ,参数tup可以是元组,列表,或者numpy数组,返回结果为numpy的数组。它其实就是水平(按列顺序)把数组给堆叠起来,与vstack()函数正好相反。举几个简单的例子:

?
1
2
3
a = np.array([1,2,3])
b = np.array([2,3,4])
np.hstack([a,b])

输出为:

?
1
array([1, 2, 3, 2, 3, 4])

进一步,对于二维数组的情形:

?
1
2
3
a=[[1],[2],[3]]
b=[[1],[2],[3]]
np.hstack([a,b])

输出为:

?
1
2
3
array([[1, 1],
       [2, 2],
       [3, 3]])

如果进行hstack的数组至少有两维,那么相当于np.concatenate([a,b],axis=1)

?
1
2
3
a=[[1],[2],[3]]
b=[[1],[2],[3]]
np.concatenate([a,b],axis=1)

输出跟刚才的结果是一致的

?
1
2
3
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函数的作用是一样的,我们通过例子来体会:

?
1
2
3
4
5
6
7
8
9
10
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
4
[[1 2 3]
 [2 3 4]]
[[1 2 3]
 [2 3 4]]

以上就是numpy中hstack vstack stack concatenate函数示例详解的详细内容,更多关于numpy函数示例的资料请关注服务器之家其它相关文章!

原文链接:http://r4.gs/887J

延伸 · 阅读

精彩推荐
  • PythonPython海龟绘图(Turtle)应用指南

    Python海龟绘图(Turtle)应用指南

    python2.6版本中后引入的一个简单的绘图工具,叫做海龟绘图(Turtle Graphics)。海龟绘图(turtle库)是python的内部模块,使用前导入即可。本文将展示三个通过海...

    BoBo yeah10582022-11-16
  • Pythonpython实现带错误处理功能的远程文件读取方法

    python实现带错误处理功能的远程文件读取方法

    这篇文章主要介绍了python实现带错误处理功能的远程文件读取方法,涉及Python使用socket操作远程文件的相关技巧,非常具有实用价值,需要的朋友可以参考下...

    重负在身3302020-06-17
  • Python使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式

    使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式

    今天小编就为大家分享一篇使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    rocketeerLi7402020-05-03
  • PythonPython实现利用163邮箱远程关电脑脚本

    Python实现利用163邮箱远程关电脑脚本

    这篇文章主要为大家详细介绍了Python实现利用163邮箱远程关电脑脚本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    阿有耳9762021-01-16
  • Pythonpython双向链表实例详解

    python双向链表实例详解

    这篇文章主要为大家详细介绍了python双向链表实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    python-行者6392023-02-17
  • PythonPython 实现数据库更新脚本的生成方法

    Python 实现数据库更新脚本的生成方法

    下面小编就为大家带来一篇Python 实现数据库更新脚本的生成方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    脚本之家6132020-11-25
  • PythonPython装饰器decorator用法实例

    Python装饰器decorator用法实例

    这篇文章主要介绍了Python装饰器decorator用法,以实例形式详细讲述了Python装饰器及相关概念与用途,需要的朋友可以参考下 ...

    脚本之家2262020-05-12
  • Python使用python tkinter实现各种个样的撩妹鼠标拖尾效果

    使用python tkinter实现各种个样的撩妹鼠标拖尾效果

    这篇文章主要介绍了使用python tkinter实现各种个样的撩妹鼠标拖尾效果,本文通过实例代码,给大家介绍的非常详细,对大家的学习或工作具有一定的参考借...

    大家一起学编程(python)9402022-01-01