当前位置: 首页 > news >正文

Numpy从入门到精通——数组变形|合并数组

这个专栏名为《Numpy从入门到精通》,顾名思义,是记录自己学习numpy的学习过程,也方便自己之后复盘!为深度学习的进一步学习奠定基础!希望能给大家带来帮助,爱睡觉的咋祝您生活愉快! 这一篇介绍《Numpy从入门到精通——数组变形|合并数组

在这里插入图片描述

文章目录

  • 一、修改数组的形状
    • 1.1 reshape函数
    • 1.2 resize函数
    • 1.3 T函数
    • 1.4 ravel函数
    • 1.5 flatten(order="C")函数
    • 1.6 squeeze函数
    • 1.7 transpose函数
  • 二、合并数组
    • 2.1 append函数
    • 2.2 concatenate函数
    • 2.3 stack函数
    • 2.4 zip函数

在深度学习中,常常会涉及到矩阵的变形。在实际任务中,我们常常需要将处理好的数据以模型能接收的形式发送,然后通过模型计算出一个结果返回。不同模型所要接受的数据的格式是不一样的,这就要求我们将数据处理成符合模型要求的格式。最常见的就是矩阵或者是数组的运算,所以这次我们分享numpy怎么样进行数组变形和合并数组。

一、修改数组的形状

首先我们给出numpy中修改向量的一些常用函数:

函数描述
arr.reshape重新对向量arr维度进行改变,不修改向量本身
arr.resize重新对向量arr维度进行改变,修改向量本身
arr.T对向量arr进行转置
arr.ravel对向量arr进行展平,即将多维数组变成1维数组,不会产生原数组的副本
arr.flatten对向量arr进行展平,即将多维数组变成1维数组,返回原数组的副本
arr.squeeze只能对维数为1的数组降维。对多维数组使用时虽然不会报错,但是不会产生任何影响
arr.transpose对高维矩阵进行轴对换

下面我们通过具体的代码看每一个函数的效果:

1.1 reshape函数

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :numpy学习 
@File    :task_19.py
@IDE     :PyCharm 
@Author  :咋
@Date    :2023/4/22 10:48 
"""
import numpy as nparr = np.arange(10)
print(arr)
# 将向量 arr 维度变换为2行5列
print(arr.reshape(2, 5))
# 指定维度时可以只指定行数或列数, 其他用 -1 代替
print(arr.reshape(5, -1))
print(arr.reshape(-1, 5))

输出为:

[0 1 2 3 4 5 6 7 8 9]
[[0 1 2 3 4][5 6 7 8 9]]
[[0 1][2 3][4 5][6 7][8 9]]
[[0 1 2 3 4][5 6 7 8 9]]

值得注意的是,说设置的行数和列数一定要能够被整除,否则会报错!

1.2 resize函数

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :numpy学习 
@File    :task_20.py
@IDE     :PyCharm 
@Author  :咋
@Date    :2023/4/22 10:52 
"""
import numpy as nparr = np.arange(10)
print(arr)
# 将向量 arr 维度变换为2行5列
arr.resize(2, 5)
print(arr)

输出为:

[0 1 2 3 4 5 6 7 8 9]
[[0 1 2 3 4][5 6 7 8 9]]

resize是没有返回值的,直接在原数组上进行操作。

1.3 T函数

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :numpy学习 
@File    :task_21.py
@IDE     :PyCharm 
@Author  :咋
@Date    :2023/4/22 10:58 
"""
import numpy as nparr = np.arange(12).reshape(3, 4)
# 向量 arr 为3行4列
print(arr)
# 将向量 arr 进行转置为4行3列
print(arr.T)

输出为:

[[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]]
[[ 0  4  8][ 1  5  9][ 2  6 10][ 3  7 11]]

转置是有返回值的,所有可以用print直接输出出来。

1.4 ravel函数

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :numpy学习 
@File    :task_22.py
@IDE     :PyCharm 
@Author  :咋
@Date    :2023/4/22 11:00 
"""
import numpy as nparr = np.arange(6).reshape(2, -1)
print(arr)
# 按照列优先,展平
print("按照列优先,展平")
print(arr.ravel('F'))
# 按照行优先,展平
print("按照行优先,展平")
print(arr.ravel())

输出为:

[[0 1 2][3 4 5]]
按照列优先,展平
[0 3 1 4 2 5]
按照行优先,展平
[0 1 2 3 4 5]

默认情况是按照行优先进行排序,设置“F”可以安装列优先进行展开。

1.5 flatten(order=“C”)函数

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :numpy学习 
@File    :task_23.py
@IDE     :PyCharm 
@Author  :咋
@Date    :2023/4/22 11:08 
"""
import numpy as np
a =np.floor(10*np.random.random((3,4)))
print(a)
print(a.flatten(order='C'))
print(a)

输出为:

[[4. 5. 5. 7.][3. 7. 3. 0.][0. 4. 6. 0.]]
[4. 5. 5. 7. 3. 7. 3. 0. 0. 4. 6. 0.]
[[4. 5. 5. 7.][3. 7. 3. 0.][0. 4. 6. 0.]]

flatten经常在卷积网络与全连接层之间,一般在网络需要把2维,3维的多维数组转化为一维数组时使用:
在这里插入图片描述

1.6 squeeze函数

import numpy as nparr =np.arange(3).reshape(3, 1)
print(arr.shape)  #(3,1)
print(arr.squeeze().shape)  #(3,)
arr1 =np.arange(6).reshape(3,1,2,1)
print(arr1.shape) #(3, 1, 2, 1)
print(arr1.squeeze().shape) #(3, 2)

输出为:

(3, 1)
(3,)
(3, 1, 2, 1)
(3, 2)

squeeze函数主要用于降维,可以把数组中含1的维度去掉。

1.7 transpose函数

import numpy as nparr2 = np.arange(24).reshape(2,3,4)
print(arr2.shape)  #(2, 3, 4)
print(arr2.transpose(1,2,0).shape)  #(3, 4, 2)

输出:

(2, 3, 4)
(3, 4, 2)

还记得我们之前说opencv读取图片是BGR格式的吗?我们可以通过numpy.transpose函数进行轴对换,变成RGB格式,再用plt就能正常显示了!

二、合并数组

合并数组也是比较常见的操作之一,同样的,我们先看有哪些函数然后对这些函数进行说明:

函数描述
np.append内存占用大
np.concatenate没有内存问题
np.stack沿着新的轴加入一系列数组
np.hstack栈数组垂直顺序(行)
np.vstack栈数组垂直顺序(列)
np.dstack栈数组按顺序深入(沿第3维)
np.vsplit将数组分解成垂直的多个子数组的列表
zip[iterable,…]将对象中对应的元素打包成一个个元组构成的zip对象

说明

  • append、concatnate以及stack函数都有一个 axis 参数,用于控制数组合并是按行还是按列排序。
  • append和concatnate函数中待合并的数组必须有相同的行数或列数(满足一个即可)。
  • stack、hstack、dstack函数中待合并的数组必须具有相同的形状( shape)。

2.1 append函数

合并一维数组

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :numpy学习 
@File    :task_26.py
@IDE     :PyCharm 
@Author  :咋
@Date    :2023/4/22 11:40 
"""
import numpy as npa = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.append(a, b)
print(c)
# [1 2 3 4 5 6]

输出:

[1 2 3 4 5 6]

合并多维数组

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :numpy学习 
@File    :task_27.py
@IDE     :PyCharm 
@Author  :咋
@Date    :2023/4/22 11:41 
"""
import numpy as npa = np.arange(4).reshape(2, 2)
b = np.arange(4).reshape(2, 2)
# 按行合并
c = np.append(a, b, axis=0)
print('按行合并后的结果')
print(c)
print('合并后数据维度', c.shape)
# 按列合并
d = np.append(a, b, axis=1)
print('按列合并后的结果')
print(d)
print('合并后数据维度', d.shape)

输出为:

按行合并后的结果
[[0 1][2 3][0 1][2 3]]
合并后数据维度 (4, 2)
按列合并后的结果
[[0 1 0 1][2 3 2 3]]
合并后数据维度 (2, 4)

2.2 concatenate函数

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :numpy学习 
@File    :task_28.py
@IDE     :PyCharm 
@Author  :咋
@Date    :2023/4/22 11:43 
"""
import numpy as npa = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])c = np.concatenate((a, b), axis=0)
print(c)
d = np.concatenate((a, b.T), axis=1)
print(d)

输出为:

[[1 2][3 4][5 6]]
[[1 2 5][3 4 6]]

2.3 stack函数

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :numpy学习 
@File    :task_29.py
@IDE     :PyCharm 
@Author  :咋
@Date    :2023/4/22 11:43 
"""
import numpy as npa = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(np.stack((a, b), axis=0))

输出为:

[[[1 2][3 4]][[5 6][7 8]]]

2.4 zip函数

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :numpy学习 
@File    :task_30.py
@IDE     :PyCharm 
@Author  :咋
@Date    :2023/4/22 11:45 
"""
import numpy as npa = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
c = c = zip(a, b)
for i, j in c:print(i, end=",")print(j)

输出为:

[1 2],[5 6]
[3 4],[7 8]

zip函数组合两个向量

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :numpy学习 
@File    :task_31.py
@IDE     :PyCharm 
@Author  :咋
@Date    :2023/4/22 11:49 
"""
import numpy as npa1 = [1, 2, 3]
b1 = [4, 5, 6]
c1 = zip(a1, b1)
for i, j in c1:print(i, end=",")print(j)

输出为:

1,4
2,5
3,6

在这里插入图片描述

相关文章:

Numpy从入门到精通——数组变形|合并数组

这个专栏名为《Numpy从入门到精通》,顾名思义,是记录自己学习numpy的学习过程,也方便自己之后复盘!为深度学习的进一步学习奠定基础!希望能给大家带来帮助,爱睡觉的咋祝您生活愉快! 这一篇介绍《…...

DJ4-5 路由算法:LS 和 DV

目录 一、迪杰斯特拉算法 1. 术语定义 2. 算法描述 3. 举例说明 4. 构建从源节点到目的节点的路径 5. 构建最低费用路径树 6. 构建转发表 二、距离向量路由算法 1. 术语定义 2. 举例说明 3. 距离向量表 4. 更新距离向量表 5. 举例说明 三、距离向量路由算法 PLUS…...

python图像处理之形态学梯度、礼帽、黑帽

文章目录 简介实战 简介 腐蚀和膨胀是图像形态学处理的基本运算,这两种运算的复合运算构成了开和闭,而腐蚀、膨胀与原图之间的加减操作,则构成了形态学梯度、礼帽和黑帽计算。 由于这几种函数均基于腐蚀和膨胀,所以其参数均与开…...

千万级直播系统后端架构设计

1、架构方面 1.1 基本 该图是某大型在线演唱会的直播媒体架构简图。 可以看出一场大型活动直播涵盖的技术方案点非常庞杂,本节接下来的内容我们将以推拉流链路、全局智能调度、流量精准调度以及单元化部署,对这套直播方案做一个展开介绍。 1.2 推拉流链…...

ImageJ 用户手册——第五部分(菜单命令File,Edit)

这里写目录标题 菜单命令26. File26.1 New26.1.1 Image26.1.2 Hyperstack26.1.3 Text Window26.1.4 Internal Clipboard26.1.5 System Clipboard 26.2 Open26.3 Open Next26.4 Open Samples26.5 Open Recent26.6 Import26.6.1 Image Sequence26.6.2 Raw26.6.3 LUT26.6.4 Text I…...

nmap常用命令

一、nmap简介 Nmap,也就是Network Mapper。nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一&…...

常用adb 命令

目录 一、常用简单的adb命令: 二、adb shell pm基本的命令: 三、adb shell am基本的命令: 四、关闭某项进程,以monkey为例: 五、最近12小时的资源情况: 六、录制屏幕命令: 七、截图命令&am…...

后端开发常犯的问题(Java版)

数据类型使用不当 ——钱相关的计算,数据类型必须用BigDecimal 1.很多开发在做金额计算时会使用double数据类型,自测一些常用场景认为double是满足需求的因而图省事直接使用此数据类型。使用double类型存在金额精度丢失的风险,涉及到钱的数据…...

Vue CLI 部署

通用指南 如果你用 Vue CLI 处理静态资源并和后端框架一起作为部署的一部分,那么你需要的仅仅是确保 Vue CLI 生成的构建文件在正确的位置,并遵循后端框架的发布方式即可。 如果你独立于后端部署前端应用——也就是说后端暴露一个前端可访问的 API&…...

客快物流大数据项目(一百一十七):网关 Spring Cloud Gateway

文章目录 网关 Spring Cloud Gateway 一、简介 1、功能特性...

fMRI时间序列振幅和相位对功能连接分析的影响

导读 目的:fMRI领域的一些研究使用瞬时相位(IP)表征(源自BOLD时间序列的解析表征)考察了脑区之间的同步性。本研究假设来自不同脑区的瞬时振幅(IA)表征可以为脑功能网络提供额外的信息。为此,本研究探索了静息态BOLD fMRI信号的这种表征,用于…...

备战2个月,四轮面试拿下字节offer...

背景 菜 J 一枚,本硕都是计算机(普通二本),2021 届应届硕士,软件测试方向。个人也比较喜欢看书,技术书之类的都有看,最后下面也会推荐一些经典书籍。 先说一下春招结果:拿下了四个…...

关于Nginx

一、常见的“服务器中间件”(即http server-web中间件)有哪些 Tomcat、Jboss、Apache、WeBlogic、Jetty、webSphere、Nginx、IIS 二、nginx的特点 1.性能高,能承受5万并发每秒; 2.内存、磁盘,读取消耗空间小。 三、…...

tensorflow中的共享变量

(1)用途 在构建模型时,需要使用tf.Variable来创建一个变量(也可以理解成节点)。但在某种情况下,一个模型需要使用其他模型创建的变量,两个模型一起训练。此时需要用到共享变量。这时就是通过引…...

flink cep数据源keyby union后 keybe失效

问题背景:cep模板 对数据源设置分组条件后,告警的数据,和分组条件对不上, 掺杂了,其他的不同组的数据,产生了告警 策略条件: 选择了两个kafka的的topic的数据作为数据源, 对A 数据…...

python中的继承与多态,dir()函数

Python继承 在继承关系中,已有的、设计好的类称为父类或基类,新设计的类称为子类或派生类。派生类可以继承父类的公有成员,但是不能继承其私有成员。如果需要在派生类中调用基类的方法,可以使用内置函数super()或者通过“基类名.…...

C++练级之初级:第五篇

C练级之初级:第五篇 第五篇 C练级之初级:第五篇1.auto关键字2.for循环改进3.指针空值nullptr4.内联函数4.1内联函数的概念4.2内联函数的注意点 总结 1.auto关键字 🤔什么是auto(automatic的缩写,自动的意思)关键字? au…...

JMeter的使用(二)

九、直连数据库 通过直连数据库让程序代替接口访问数据库,如果二者预期结果不一致,就找到了程序缺陷。 获取某条学院的名字,放在百度搜索: JMeter 不具备直连数据库功能,必须整合第三方(jar包)实现配置数据库的连接通过JDBC Re…...

C/C++文件操作/IO流

学习任务: ⭐认识文件。⭐学习C语言中文件如何打开和关闭。⭐学习C语言中文件的读写方法(包括顺序读写和随机读写)。⭐学习C语言文件操作中如何判断文件读取结束。⭐简单了解FILE缓冲区。⭐认识流。⭐学习C的IO流,包括标准IO流和文…...

推荐 7 个超牛的 Spring Cloud 实战项目

个 把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,这就是微服务架构的架构概念,通过将功能分解到各个离散的服务中以实现对解决方案的解耦。 关于微服务相关的学习资料不多,而 GitHub 上的开源项目可以作为你微服务之旅…...

接口测试中缓存处理策略

在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

在rocky linux 9.5上在线安装 docker

前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...