np.concatenate()函数的具体使用
作者:勤奋的大熊猫 发布时间:2023-06-21 11:15:19
引言
提到 numpy 的数组操作,我们就不得不说到 np.concatenate() 函数,concatenate 一词在英文中是级联的意思,我们可以简单地理解为连接,拼接。
函数调用
调用方法
numpy.concatenate((a1, a2, ...), axis=0, out=None)
各个参数的意义
(a1, a2, ...):数组序列,注意要用 () 或者 [] 符号括起来,否则会报错,具体可以参考这篇------np.concatenate()函数数组序列参数。
axis:设置级联时的坐标轴,如沿着x轴,y 轴或者 z 轴级联。对于坐标轴问题,具体可以参考这篇------numpy.sum()坐标轴问题。
out:(可选参数)暂时不做讨论。
有返回值,返回级联后的数组。
注意事项
在使用该函数的时候务必要注意,(a1, a2, ...) 中的 a1 , a2 均应该为可以迭代的对象,且维度不能够为 0,比如:我们给 a1 = 5 一个整数值,此时会得到 zero-dimensional arrays cannot be concatenated 的错误提示,具体代码如下:
# -*- coding:utf-8 -*-
"""
author: 15025
age: 26
e-mail: 1502506285@qq.com
time: 2020/12/1 16:54
software: PyCharm
Description:
"""
import numpy as np
class Debug:
@staticmethod
def mainProgram():
x = 5
y = np.ones(3)
z = np.concatenate(([x], y))
z1 = np.concatenate((np.array([x]), y))
# wrong calling method
# z = np.concatenate((x, y))
# print(z)
print("The value of z is: ")
print(z)
print("The value of z1 is: ")
print(z1)
if __name__ == "__main__":
main = Debug()
main.mainProgram()
"""
The value of z is:
[5. 1. 1. 1.]
The value of z1 is:
[5. 1. 1. 1.]
"""
我们可以看到,对于单个整数,我们可以先将它转换为 ndarray 或者 list 对象,然后进行级联操作。但是如果我们直接进行级联操作就会出错,可以自行尝试被注释掉的部分。
接下来我们给几个相关的例子。
示例1------一维数组
代码如下:
# -*- coding: utf-8 -*-
import numpy as np
class Debug:
def __init__(self):
self.x = np.array([1, 2, 3])
self.y = np.array([4, 5, 6])
self.x1 = np.array([[1],[2],[3]])
self.y1 = np.array([[4],[5],[6]])
def mainProgram(self):
z = np.concatenate((self.x, self.y))
z1 = np.concatenate((self.x1, self.y1))
print("The value of z is: ")
print(z)
print("The value of z1 is: ")
print(z1)
if __name__ == "__main__":
main = Debug()
main.mainProgram()
"""
The value of z is:
[1 2 3 4 5 6]
The value of z1 is:
[[1]
[2]
[3]
[4]
[5]
[6]]
"""
我们可以看到,对于结果 z ,np.concatenate() 完成的操作类似于np.hstack()函数,沿着 x 轴进行数组堆叠。对于结果 z1 ,np.concatenate() 完成的操作类似于np.vstack()函数,沿着 y 轴进行数组堆叠。我们知道这里是一维情况,产生这种结果的原因是 np.concatenate() 函数默认的连接方向是与被连接的数组本身的坐标轴方向是一致的。因为 self.x 与 self.y 均为横向数组,所以沿着横向连接。同理 self.x1 与 self.y1 均为纵向数组,所以沿着纵向连接。那么可不可能把一个横向数组和一个纵向数组连接起来呢?答案是否定的,可以自行尝试,比如将这里的 self.x 与 self.y1 连接起来,会得到一个错误。
既然对于一维数组是可以进行连接的,那么二维数组呢?接下来我们研究一下二维数组。
示例2------二维数组
代码如下:
# -*- coding: utf-8 -*-
import numpy as np
class Debug:
def __init__(self):
self.x = np.array([[1, 2], [3, 4]])
self.y = np.array([[5, 6], [7, 8]])
def mainProgram(self):
z = np.concatenate((self.x, self.y), axis=0)
z1 = np.concatenate((self.x, self.y), axis=1)
print("The value of z is: ")
print(z)
print("The value of z1 is: ")
print(z1)
if __name__ == "__main__":
main = Debug()
main.mainProgram()
"""
The value of z is:
[[1 2]
[3 4]
[5 6]
[7 8]]
The value of z1 is:
[[1 2 5 6]
[3 4 7 8]]
"""
我们可以从 z 的结果中得出,此时 np.concatenate() 完成的操作类似于np.vstack()函数, 沿着 y 轴进行数组堆叠。从 z1 的结果中我们可以看到,np.concatenate() 完成的操作类似于np.hstack()函数,沿着 x 轴进行数组堆叠。如我们之前讨论过的坐标轴问题,类似于np.repeat()的坐标轴问题。二维情况下,从左向右,axis=0 指的就是 y 轴,axis=1 指的就是 y 轴。
那么 np.concatenate() 函数对于一维,二维均是起作用的,那么对于三维数组,它可以使用吗?答案是肯定的。
示例3------三维数组
代码如下:
# -*- coding: utf-8 -*-
import numpy as np
class Debug:
def __init__(self):
self.x = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
self.y = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
def mainProgram(self):
z = np.concatenate((self.x, self.y), axis=0)
z1 = np.concatenate((self.x, self.y), axis=1)
z2 = np.concatenate((self.x, self.y), axis=2)
print(self.x.shape)
print("The value of z is: ")
print(z)
print("The value of z1 is: ")
print(z1)
print("The value of z2 is: ")
print(z2)
if __name__ == "__main__":
main = Debug()
main.mainProgram()
"""
The value of z is:
[[[1 2]
[3 4]]
[[5 6]
[7 8]]
[[1 2]
[3 4]]
[[5 6]
[7 8]]]
The value of z1 is:
[[[1 2]
[3 4]
[1 2]
[3 4]]
[[5 6]
[7 8]
[5 6]
[7 8]]]
The value of z2 is:
[[[1 2 1 2]
[3 4 3 4]]
[[5 6 5 6]
[7 8 7 8]]]
"""
我们可以看到结果完全符合我们的预期。至此,np.concatenate() 函数的研究就告一段落了。
来源:https://blog.csdn.net/u011699626/article/details/109095989


猜你喜欢
- 写了一段时间java切回写python偶尔会出现一些小麻烦,比如:在java中自定义对象变成json串很简单,调用一个方法就行,但同样的转换
- 直接上代码:#!/usr/bin/python # Filename s5.py # Python Dynamic Socks5 Proxy
- 通常我们提交代码一般都是 git add ,git commit -m, git push的这么个流程。添加到暂存区
- 视频观看视频敌人精灵这是我们“Shmup”项目的第2部分!在本课中,我们将添加一些敌人的精灵供玩家躲
- 数组去重ES6提供了几种简洁的数组去重的方法,但该方法并不适合处理非基本类型的数组。对于基本类型的数组去重,可以使用... new Set(
- 为了访问数据库,就要提供数据库连接类,在C#中,是通过Connection类来实现的四种类型的连接方式SQLConnectionADOCon
- 目的是为了检测出采集数据中的异常值。所以很明确,这种情况下的簇为2:正常数据和异常数据两大类1、安装相应的库import matplotli
- 1. 张量的拼接(1) numpy.concatenatenp.concatenate((a1,a2,a3,…), axis=0)张量的拼接
- 在SQL Server中进行开发会让你身处险地,并且寻找快速解决方案。我们编辑了前十名关于SQL Server开发的常见问题。对常见的针对表
- 之前已经写过一篇关于Django外键的文章,但是当时并没有介绍如何根据外键对数据的操作,也就是如何通过主表查询子表或者通过子表查询主表的信息
- 1.需要导的包import pymysql2.# mysql连接信息(字典形式)db_config ={ 'host': &
- 散点图散点图是指在 回归分析中,数据点在直角坐标系平面上的 分布图,散点图表示因变量随 自变量而 变
- 一、数据描述数据集中9994条数据,横跨1237天,销售额为2,297,200.8603美元,利润为286,397.0217美元,他们的库存
- 经常写文章的小伙伴可能会头疼,图片需要一张一张的上传,费劲也耗时,今天就推荐几款超简单的图床工具。图床就是一个在网络上存储图片的地方,目的是
- 本文实例讲述了php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法。分享给大家供大家参考,具体如下:微信支付a
- SQL语句参考及记录集对象详解1. ASP与Access数据库连接:2. ASP与SQL数据库连接:建立记录集对象:set rs=serve
- 如何使用,直接上代码/** * 安装node-xlsx插件 */var path = require('path')var
- 使用MySQL进行数据库备份,有很正规的数据库备份方法,同其他的数据库服务器有相同的概念,但有没有想过,MySQL会有更简捷的使用文件目录的
- 如下所示:#!/usr/bin/env python#_*_ coding:utf-8 _*_name = ['hello'
- 在向大家详细介绍Linux mysql之前,首先让大家了解下Linux mysql,然后全面介绍Linux mysql,希望对大家有用。1.