6.科学计算模块Numpy(3)对ndarray数组的常用操作

news2024/9/22 5:26:22

引言

众所周知,numpy能作为python中最受欢迎的数据处理模块,脱离不了它最核心的部件——ndarray数组。那么,我们今天就来了解一下numpy中对ndarray的常用操作。

通过阅读本篇博客你可以:

1.掌握ndarray数组的切片和copy

2.学会如何改变ndarray的数组维度

3.掌握数组的拼接

一、ndarray数组的切片和copy

1.ndarray数组的切片

ndarray对象的内容可以通过索引或切片来访问和修改,与Python中的list的切片操作一样。ndarray数组可以基于0-n的下标进行索引,并设置start,stop,step参数,从原数组中切割出一个新数组。

代码示例如下:

import numpy as np

# 一维数组切片和索引的使用
x = np.arange(10)
print(x)  # [0 1 2 3 4 5 6 7 8 9]
y = x[2:9:2]
print(y)  # [2 4 6 8]
z = x[2:]
print(z)  # [2 3 4 5 6 7 8 9]

2.copy()

numpy.copy()可以用来复制ndarray数组。这个时候就有人要问了:“我们直接用切片或者说直接赋值给一个新变量来获取原数组不也同样可以做到复制的效果吗?”

这就是我们要讲的copy()普通切片赋值操作的区别。我们直接看下面的代码示例

import numpy as np

# 直接切片赋值
arr = np.arange(10)
temp = arr[:3]
temp[0] = 100
print(arr)  # [100   1   2   3   4   5   6   7   8   9]

# copy()复制
arr = np.arange(10)
temp = np.copy(arr[:3])
temp[0] = 100
print(arr)  # [0 1 2 3 4 5 6 7 8 9]

从上述的代码我们能看出来,直接切片赋值得到的temp变量,在改变了0索引之后,原数组arr也改变了0索引的值。而copy()复制得到的temp变量,在改变了0索引之后,原数组arr并没有改变0索引的值。这是由于直接切片赋值得到的temp变量与原数组arr共享同一块内存,属于浅拷贝。而copy()复制的temp变量是一个新的数组,属于深拷贝

结论:

①直接切片赋值对切片的修改会影响原始数组

②copy()复制对副本的修改不会影响原始数组

二、ndarray数组的维度改变

处理数组的一项重要工作就是改变数组的维度,包含提升数组的维度和降低数组的维度。numpy中封装了大量的方法用来改变数组的维度。

1.reshape()

使用numpy.reshape()函数,你可以将一个数组的形状转变为另一个形状,而不改变数组中的数据。

代码示例如下:

import numpy as np

# 将一维数组改为 2 * 5 的二维数组
arr = np.arange(10)
res = arr.reshape(2, 5)
print(res)
"""[[0 1 2 3 4]
    [5 6 7 8 9]]
"""

2.ravel()

numpy.ravel()可以将多维ndarray数组转换成一维数组。

代码示例如下:

import numpy as np

# 创建一个二维数组
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)
"""[[1 2 3]
    [4 5 6]]
"""
# 使用 ravel() 展平数组
flattened_arr = arr.ravel()
print(flattened_arr)  # [1 2 3 4 5 6]

3.flatten()

numpy.flatten()函数同numpy.ravel()一样可以将多维数组展平为一维数组。但是numpy.flatten()会返回一个展平后的副本,如果修改副本不会影响原数组。但numpy.ravel()是返回一个视图,修改展平后的视图会影响到原数组。

代码示例如下:

import numpy as np

# 创建一个二维数组
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)
"""[[1 2 3]
    [4 5 6]]
"""

# 使用 flatten() 展平数组
flattened_arr = arr.flatten()
print(flattened_arr)  # [1 2 3 4 5 6]

三、ndarray数组的拼接

1.水平数组的组合

hstack()

numpy.hstack()函数用于多维数组的水平拼接,在拼接数组时沿着第一个轴(即横轴)进行操作,因此适用于二维数组的列拼接,也可以用于更高维度数组的横向拼接。

代码示例如下:

import numpy as np

# 创建两个二维数组
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8, 9], [10, 11, 12]])

# 使用 hstack() 进行水平拼接
result = np.hstack((arr1, arr2))
print(result)
"""[[ 1  2  3  7  8  9]
    [ 4  5  6 10 11 12]]
"""

2.垂直数组的组合

vstack()

numpy.vstack()函数可以将多个数组沿着垂直方向拼接,在拼接数组时沿着第二个轴(即纵轴)进行操作,因此适用于二维数组的行拼接,也可以用于更高维度数组的纵向拼接。

代码示例如下:

import numpy as np

# 创建两个二维数组
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8, 9], [10, 11, 12]])

# 使用 vstack() 进行垂直拼接
result = np.vstack((arr1, arr2))
print(result)
"""[[ 1  2  3]
    [ 4  5  6]
    [ 7  8  9]
    [10 11 12]]
"""

3.通用的数组的拼接

concatenate()

import numpy as np
np.concatenate((a0,a1,...,an),axis)

numpy.concatenate()函数可用于水平组合也可用于垂直组合。具体使用哪个方向取决于参数axis。如果参数axis = 0,则是垂直拼接;如果参数axis = 1,则是水平拼接。

代码示例如下:

import numpy as np

# 创建三个二维数组
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8, 9], [10, 11, 12]])
arr3 = np.array([[13, 14, 15], [16, 17, 18]])

# 沿着第一个轴(纵向)拼接
result_axis0 = np.concatenate((arr1, arr2, arr3), axis=0)
print(result_axis0)
"""[[ 1  2  3]
    [ 4  5  6]
    [ 7  8  9]
    [10 11 12]
    [13 14 15]
    [16 17 18]]
"""

# 沿着第二个轴(横向)拼接
result_axis1 = np.concatenate((arr1, arr2, arr3), axis=1)
print(result_axis1)
"""[[ 1  2  3  7  8  9 13 14 15]
    [ 4  5  6 10 11 12 16 17 18]]
"""

总结 

本章博客介绍了numpy模块中多维数组的切片、维度的改变以及不同的拼接方法。希望可以对大家起到作用,谢谢。


关注我,内容持续更新(后续内容在作者专栏《从零基础到AI算法工程师》)!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2111376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

wx.chooseMessageFile在pc端微信小程序失效解决方法

项目场景: 在uniapp上驱动微信开发者工具(下图) 在手机上和微信开发者工具中(图1)都可以上传成功, 打开pc端的微信小程序 在pc端打开小程序时点击上传没反应 问题描述 提示:这里描述项目中遇到…

css实现卡片右上角的状态

1、成品展示 2、html部分 <div class"itemBox"><div class"status">{{ statusList[item.status] }}</div> </div> 3、css部分 .itemBox {position: relative;overflow: hidden; } .status {height: 25px;line-height: 25px;bac…

ISO26262 功能安全对设计的要求以及评判安全等级的主要参数

ISO 26262 标准规定了道路车辆功能安全的相关要求&#xff0c;不同 ASIL 等级对控制器在设计、安全机制、验证确认和文档记录等方面有不同要求。高 ASIL 等级的控制器需满足更高的硬件和软件设计标准&#xff0c;具备更强的故障检测、诊断、容错和恢复能力&#xff0c;进行更严…

电脑回收站被清空,怎么恢复丢失数据?

回收站&#xff0c;这个看似不太起眼的电脑功能&#xff0c;实际上在关键时刻能够为我们挽回重大损失&#xff0c;帮助我们重新获得至关重要的文件和数据。对于经常与电脑打交道的朋友们来说&#xff0c;当某个文件被不小心删除时&#xff0c;回收站往往成为我们文件找回和恢复…

Vue 项目hash和history模式打包部署与服务器配置

你好&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏、评论和关注。 在开发 Vue 项目时&#xff0c;Vue Router 提供了两种模式来创建单页面应用&#xff08;SPA&#xff09;的 URL&#xff1a;hash 模式和 history 模式。 简单说下两者的主要区别&#xff1a; hash 模式下的…

2024 年高教社杯全国大学生数学建模竞赛B题—生产过程中的决策问题(讲解+代码+成品论文助攻)

2024数学建模国赛选题建议团队助攻资料-CSDN博客https://blog.csdn.net/qq_41489047/article/details/141925859本次国赛white学长团队选择的是比较擅长的BC题&#xff0c;选题建议和助攻资料可参见上面这篇博文&#xff0c;本篇博文主要介绍B题—生产过程中的决策问题&#xf…

反转二叉树(递归非递归解决)

给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 方法一&#xff1a;递归解法 递归是处理树结构问题的常用方式&#xff0c;二叉树的问题通…

【RLHF】浅谈ChatGPT 等大模型中的RLHF算法

本文收录于《深入浅出讲解自然语言处理》专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅!​个人主页:有梦想的程序星空​个人介绍:小编是人工智能领域硕士,全栈工程师,深耕Flask后端开发、数据挖掘、NLP、Android开发、自动化等领域,有较丰…

生成tekton dashboard

我们在之前的&#xff08;安装和构建ci&#xff09;实践中&#xff0c;用到都是tekton cli&#xff0c;查看ci执行情况都是通过logs&#xff0c;不是很友好。 tekton dashboard提供了很多的ui界面。这里我们来安装并使用。 1. 创建dashboard.yaml apiVersion: v1 kind: Names…

[Deepin] Deepin 安装 MEGA

下载debian包 wget https://mega.nz/linux/repo/Debian_12/amd64/megasync-Debian_12_amd64.deb注意&#xff0c;因文章过时等原因&#xff0c;请去官网下载最新包 https://mega.io/zh-hans/desktop#download 模拟安装 下载后执行命令 udo apt install --simulate ./megasy…

2023 CCPC(秦皇岛)现场(第二届环球杯.第 2 阶段:秦皇岛)部分题解

所有题目链接&#xff1a;Dashboard - The 2023 CCPC (Qinhuangdao) Onsite (The 2nd Universal Cup. Stage 9: Qinhuangdao) - Codeforces 中文题面&#xff1a; contest-37054-zh.pdf (codeforces.com) G. Path 链接&#xff1a; Problem - G - Codeforces 中文题面 测试…

【Hadoop|HDFS篇】NameNode和SecondaryNameNode

1. NN和2NN的工作机制 思考&#xff1a;NameNode中的元数据是存储在哪里的&#xff1f; 首先&#xff0c;我们做个假设&#xff0c;如果存储在NameNode节点的磁盘中&#xff0c;因为经常需要进行随机访 问&#xff0c;还有响应客户请求&#xff0c;必然是效率过低。因此&…

Java面试题——第五篇(Java基础)

1. main方法为什么是静态的&#xff0c;能不能改为非静态的 由于JVM在运行Java应用程序的时候&#xff0c;首先会调用main方法&#xff0c;调用时不实例化这个类的对象&#xff0c;而是通过类名直接调用因此需要限制为public static。 不能改为非静态&#xff0c;main方法必须声…

JavaWeb - Mybatis - 基础操作

删除Delete 接口方法&#xff1a; Mapper public interface EmpMapper { //Delete("delete from emp where id 17") //public void delete(); //以上delete操作的SQL语句中的id值写成固定的17&#xff0c;就表示只能删除id17的用户数据 //SQL语句中的id值不能写成…

美妆行业的画册电子版如何制作?

美妆行业的画册电子版制作&#xff0c;首先要确立画册的主题和内容。针对美妆行业特点&#xff0c;可以展示产品系列、护肤理念、品牌故事、用户评价等内容。同时&#xff0c;为了吸引目标受众&#xff0c;需要注重画面美观和时尚感&#xff0c;突出产品特点和品牌形象。 在选择…

如何快速理解网络编程

目录 前言 一、网络编程的概念 二、TCP/IP架构体系的各层作用 三、网络通信中常用的专业术语 四、IP地址的分类和划分 前言 在一个主机中&#xff0c;我们能进行进程间通信&#xff0c;但是随这时代发展&#xff0c;我们不可能只是在单独的一个主机中传输数据&#xff0c;&…

H3C SR-MPLS通过OSPF通告SID配置

首先在配置前理解几个基本概念 Prefix SID配置 统一分配和配置&#xff08;全局规划&#xff09;loopback和prefix sidPrefix SIDSRGB Base&#xff08;16000&#xff09;index Adj SID自动生成 对应SR节点间的互联链路SR节点本地标识&#xff0c;从设备本地Segment池中动态…

观趋势 谋发展 2024 SSHT上海智能家居展有哪些创新呈现?

引言&#xff1a;大数跨境发布的《2024全球智能家居市场洞察报告》显示&#xff0c;智能家居市场正迎来快速增长&#xff0c;预计从2024年的1215.9亿美元增长至2032年的6332.0亿美元&#xff0c;复合年增长率为22.9%。 近年来&#xff0c;随着物联网、AI等底层技术的飞速进步&…

I/O管理【上】

目录 一. I/O设备的概念与分类二. I/O控制器(考的频率不高&#xff0c;但还是要有印象)三. I/O控制方式&#xff08;重要考点&#xff09;3.1 程序直接控制方式3.2 中断驱动方式3.3 DMA方式3.4 通道控制方式 四. I/O软件层次结构4.1用户层软件4.2 设备独立性软件4.3 设备驱动程…

摩博会前瞻:OneOS智能超高安全性彩屏,百元级价格,高性能骑行新选择!

引言 中国国际摩托车博览会即将启动&#xff01;倒计时7天&#xff0c;OneOS与恒石智能联合打造的十几款智能彩屏仪表首次展出&#xff01;十几款彩屏仪表由国产HMI芯片Model系列驱动&#xff0c;OneOS实时操作系统&#xff0c;100%国产自主设计&#xff0c;实现百元级超高安全…