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

7.科学计算模块Numpy(4)ndarray数组的常用操作(二)

引言

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

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

1.掌握ndarray数组的分割

2.掌握ndarray数组的各类运算函数

一、ndarray数组的分割

通过上一篇博客的学习(6.科学计算模块Numpy(3)ndarray数组的常用操作(一)_<class 'numpy.ndarray'>-CSDN博客),我们已经掌握了ndarray数组的拼接操作。正如古语所说“阴阳并济”,有了数组的拼接,那么必然有数组的分割。

数组的分割有以下常用的方法。

1.split()

import numpy as np
np.split(arr,indices_or_sections,axis)

numpy.split()函数沿特定的轴将数组分割为子数组。

arr:被分割的数组

indices_or_sections:如果是一个整数,就用该数平均切分。如果是一个数组,则按照数组的值为索引进行切分。

axis:沿着哪个维度进行切分,默认为0,横向切分。为1时,纵向切分。

代码示例如下:

import numpy as np#按整数平均切分
arr = np.arange(9)
split_arr = np.split(arr, 3)  # 分割成3个等大小的子数组
print(split_arr)    #[array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]#按索引切分
arr = np.arange(9)
split_arr = np.split(arr, [2, 5])  # 在索引2和5处分割数组
print(split_arr)    #[array([0, 1]), array([2, 3, 4]), array([5, 6, 7, 8])]

2.hsplit()

import numpy as np
np.hsplit(arr, indices_or_sections)

numpy.hsplit()用于将数组沿水平方向(即列方向)进行分割。它可以将多维数组分割成多个子数组,每个子数组具有相同的行数,但列数不同。

代码示例如下:

import numpy as np#等宽分割
arr = np.arange(12).reshape(3, 4)  # 创建一个3x4的二维数组
split_arr = np.hsplit(arr, 2)  # 分割成2个等宽的子数组
print(split_arr)
"""[array([[0, 1],[4, 5],[8, 9]]),array([[ 2,  3],[ 6,  7],[10, 11]])]"""split_arr = np.hsplit(arr, [2])  # 在第2列处分割数组
print(split_arr)
"""[array([[0, 1],[4, 5],[8, 9]]),array([[ 2,  3],[ 6,  7],[10, 11]])]"""

3.vsplit()

import numpy as np
np.vsplit(ary, indices_or_sections)

numpy.vsplit()用于将数组沿垂直方向(即行方向)进行分割。它可以将多维数组沿着行方向分割成多个子数组,每个子数组具有相同的列数,但行数不同。

代码示例如下:

import numpy as nparr = np.arange(12).reshape(4, 3)  # 创建一个4x3的二维数组
split_arr = np.vsplit(arr, 2)  # 分割成2个等高的子数组
print(split_arr)
"""[array([[0, 1, 2],[3, 4, 5]]),array([[ 6,  7,  8],[ 9, 10, 11]])]
"""split_arr = np.vsplit(arr, [2])  # 在第2行处分割数组
print(split_arr)
"""[array([[0, 1, 2],[3, 4, 5]]),array([[ 6,  7,  8],[ 9, 10, 11]])]
"""

二、ndarray数组的各类运算函数

1.算术函数

如果参与运算的两个对象都是ndarray,且形状相同。那么我们就可以对位彼此之间进行(+ - * /)运算。numpy中的算术函数包括简单的加减乘除:add(),subtract(),multiply(),divide()

①add()

import numpy as np
np.add(x1, x2, out=None, where=True)

numpy.add()函数用于对两个数组进行逐个元素的加法运算。x1和x2是输入的两个数组。out是用来提供存储结果的变量,默认是Nonewhere用于控制哪些元素进行计算,默认是True,即所有元素都参与计算。

代码示例如下:

import numpy as np# 基本加法
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
result = np.add(a, b)
print(result)  # 输出: [5 7 9]# 使用 out 参数
c = np.array([10, 20, 30])
d = np.array([1, 2, 3])
out_array = np.empty_like(c)
np.add(c, d, out=out_array)
print(out_array)  # 输出: [11 22 33]# 使用 where 参数
e = np.array([1, 2, 3, 4])
f = np.array([10, 20, 30, 40])
result_where = np.add(e, f, where=[True, False, True, False])
print(result_where)  # 输出: [11  0 33  0]

②subtract()

import numpy as np
np.subtract(x1, x2, out=None, where=True)

numpy.subtract()函数用于对两个数组进行逐个元素的减法运算。功能与numpy.add()类似,不过是进行减法操作。x1是被减数数组,x2是减数数组。

代码示例如下:

import numpy as np# 基本减法
a = np.array([10, 20, 30])
b = np.array([1, 2, 3])
result = np.subtract(a, b)
print(result)  # 输出: [ 9 18 27]

③multiply()

import numpy as np
np.multiply(x1, x2, out=None, where=True)

numpy.multiply()函数用于对两个数组进行逐个元素的乘法运算。它的功能与numpy.add()和numpy.subtract()类似,不过是进行乘法操作。

代码示例如下:

import numpy as np# 基本乘法
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
result = np.multiply(a, b)
print(result)  # 输出: [ 4 10 18]

④divide()

import numpy as np
np.divide(x1, x2, out=None, where=True)

numpy.divide()函数用于对两个数组进行逐个元素的除法运算。它的功能与以上三个算数函数类似,不过是进行除法运算。

代码示例如下:

import numpy as np# 基本除法
a = np.array([10, 20, 30])
b = np.array([2, 4, 5])
result = np.divide(a, b)
print(result)  # 输出: [ 5.  5.  6.]# 使用 out 参数
c = np.array([100, 200, 300])
d = np.array([10, 20, 30])
out_array = np.empty_like(c, dtype=float)
np.divide(c, d, out=out_array)
print(out_array)  # 输出: [10. 10. 10.]# 使用 where 参数
e = np.array([10, 20, 30, 40])
f = np.array([2, 0, 5, 0])
result_where = np.divide(e, f, where=f != 0)
print(result_where)  # 输出: [ 5.  0.  6.  0.]

2.数学函数

numpy模块中提供了大量的数学函数,支持各种常见的数学运算。这些函数非常高效,能够处理大规模数组和矩阵运算。以下是人工智能领域中我们常用到的。

①sin()

import numpy as np
np.sin(x, out=None)

numpy.sin()函数用于计算输入数组x中每个元素的正弦值(输入的角度单位是弧度)。

代码示例如下:

import numpy as np# 基本正弦值计算
angles = np.array([0, np.pi/2, np.pi])
sin_values = np.sin(angles)
print(sin_values)  # 输出: [0. 1. 0.]# 标量输入
angle = np.pi / 4
sin_value = np.sin(angle)
print(sin_value)  # 输出: 0.7071067811865475# 使用 out 参数
x = np.array([np.pi/6, np.pi/4, np.pi/3])
out_array = np.empty_like(x, dtype=float)
np.sin(x, out=out_array)
print(out_array)  # 输出: [0.5        0.70710678 0.8660254 ]# 与广播机制结合
a = np.array([[0, np.pi/2], [np.pi, 3*np.pi/2]])
sin_values = np.sin(a)
print(sin_values)
# 输出:
# [[ 0.  1.]
#  [ 0. -1.]]

②cos()

import numpy as np
np.cos(x, out=None)

numpy.cos()函数用于计算输入数组x中每个元素的余弦值(输入的角度单位是弧度)。与numpy.sin()类似。

代码示例如下:

import numpy as np# 基本余弦值计算
angles = np.array([0, np.pi/2, np.pi])
cos_values = np.cos(angles)
print(cos_values)  # 输出: [ 1.  0. -1.]

③tan()

import numpy as np
np.tan(x, out=None)

numpytan()函数用于计算输入数组x中每个元素的正切值(输入的角度单位是弧度)。与numpy.sin()类似。

代码示例如下:

import numpy as np# 基本正切值计算
angles = np.array([0, np.pi/4, np.pi/2])
tan_values = np.tan(angles)
print(tan_values)  # 输出: [ 0.00000000e+00  1.00000000e+00  1.63312394e+16]

④around()

import numpy as np
np.around(a, decimals=0, out=None)

numpy.around()函数用于对数组中的元素进行四舍五入操作。我们可以控制保留的小数位数,默认情况下,它会四舍五入到最接近的整数。a参数为输入的要进行四舍五入的数据,包括数组、标量、元组等decimals参数为保留的位数,默认情况为0。

代码示例如下:

import numpy as np# 四舍五入到最接近的整数
arr = np.array([1.2, 2.5, 3.7])
rounded_arr = np.around(arr)
print(rounded_arr)  # 输出: [1. 2. 4.]# 四舍五入到指定的小数位数
arr = np.array([1.234, 2.345, 3.456])
rounded_arr = np.around(arr, decimals=2)
print(rounded_arr)  # 输出: [1.23 2.35 3.46]# 使用 out 参数
arr = np.array([1.234, 2.345, 3.456])
out_array = np.empty_like(arr, dtype=float)
np.around(arr, decimals=2, out=out_array)
print(out_array)  # 输出: [1.23 2.35 3.46]# 四舍五入多维数组
arr = np.array([[1.234, 2.345], [3.456, 4.567]])
rounded_arr = np.around(arr, decimals=1)
print(rounded_arr)
# 输出:
# [[1.2 2.3]
#  [3.5 4.6]]

⑤floor()

import numpy as np
np.floor(x, out=None)

numpy.floor()函数用于计算数组中每个元素的向下取整值。

代码示例如下:

import numpy as np# 基本向下取整操作
arr = np.array([1.2, 2.5, 3.7])
floored_arr = np.floor(arr)
print(floored_arr)  # 输出: [1. 2. 3.]# 向下取整负数
arr = np.array([-1.2, -2.5, -3.7])
floored_arr = np.floor(arr)
print(floored_arr)  # 输出: [-2. -3. -4.]# 使用 out 参数
arr = np.array([1.9, 2.8, 3.6])
out_array = np.empty_like(arr, dtype=float)
np.floor(arr, out=out_array)
print(out_array)  # 输出: [1. 2. 3.]# 向下取整多维数组
arr = np.array([[1.9, 2.8], [3.6, 4.4]])
floored_arr = np.floor(arr)
print(floored_arr)
# 输出:
# [[1. 2.]
#  [3. 4.]]

⑥ceil()

import numpy as np
np.ceil(x, out=None)

numpy.ceil()函数用于计算数组中每个元素的向上取整值。

代码示例如下:

import numpy as np# 基本向上取整操作
arr = np.array([1.2, 2.5, 3.7])
ceiled_arr = np.ceil(arr)
print(ceiled_arr)  # 输出: [2. 3. 4.]# 向上取整负数
arr = np.array([-1.2, -2.5, -3.7])
ceiled_arr = np.ceil(arr)
print(ceiled_arr)  # 输出: [-1. -2. -3.]# 使用 out 参数
arr = np.array([1.1, 2.2, 3.3])
out_array = np.empty_like(arr, dtype=float)
np.ceil(arr, out=out_array)
print(out_array)  # 输出: [2. 3. 4.]# 向上取整多维数组
arr = np.array([[1.1, 2.6], [3.4, 4.8]])
ceiled_arr = np.ceil(arr)
print(ceiled_arr)
# 输出:
# [[2. 3.]
#  [4. 5.]]

3.聚合函数

numpy模块提供了很多统计函数,用于从数组中查找最小元素,最大元素,百分位标准差和方差等。

以上这些函数都可以直接传入数组进行运算操作并返回结果,这里就不一一赘述了。

总结

本篇博客介绍了numpy模块中ndarray数组的切割以及各类运算函数的使用操作。希望可以对大家起到作用,谢谢。


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

相关文章:

7.科学计算模块Numpy(4)ndarray数组的常用操作(二)

引言 书接上回&#xff0c;numpy能作为python中最受欢迎的数据处理模块&#xff0c;脱离不了它最核心的部件——ndarray数组。那么&#xff0c;我们今天就来了解一下numpy中对ndarray的常用操作。 通过阅读本篇博客&#xff0c;你可以&#xff1a; 1.掌握ndarray数组的分割 …...

抖音评论区截流脚本软件详细使用教学,抖音私域获客引流的五种方法。

1.先说下什么是抖音截流玩法&#xff0c;截流顾名思义就是在别的博主的视频下面去截流评论潜在流量&#xff0c;然后用评论文案的形式或者其它方式吸引用户加我们的私域~ 玩截流一定不是主动去私信别人&#xff0c;这个就不叫截流了&#xff0c;且一个账号私信多了一定会降权和…...

Linux_kernel移植uboot07

一、移植 根据硬件平台的差异&#xff0c;将代码进行少量的修改&#xff0c;修改过后的代码在目标平台上运行起来 移植还需要考虑硬件环境&#xff0c;驱动只需要考虑内核的环境 二、移植内容 1、移植Uboot uboot属于bootloader的一种&#xff0c;还有其他的bootloader&#x…...

Day-04-QFile打开文件的两种方式

一、UI界面设置两个按键&#xff0c;并直接转到槽函数 二、两种代码展示 #include <QFile> #include <QDebug>//此两种方式中调用函数&#xff0c;应包含的头文件void Widget::on_btnReadFile01_clicked()//第一种打开方式 {//1. 打开文件QFile file;file.setFile…...

第三部分:4---进程地址空间

目录 数组的空间分配解析&#xff1a; 物理地址和虚拟地址&#xff1a; 虚拟地址空间&#xff1a; 进程地址空间的本质&#xff1a; 为什么要有进程地址空间&#xff1f; 页表对进程访问内存的检查&#xff1a; 进程地址空间和页表如何关联起来&#xff1f; 进程的独立…...

【Android】程序开发组件—探究Jetpack

引言 Jetpack是一个开发组件工具集&#xff0c;它的主要目的是帮助我们编写出更加简洁的代码&#xff0c;并简化我们的开发过程&#xff0c;在这么多的组件当中&#xff0c;最需要我们关注的其实还是架构组件&#xff0c;接下来就对Jetpack的主要架构组件进行学习&#xff01;…...

pytorch torch.norm函数介绍

torch.norm 函数用于计算张量的范数&#xff08;norm&#xff09;&#xff0c;可以理解为张量的“长度”或“大小”。根据范数的不同类型&#xff0c;它可以衡量不同的张量性质。该函数可以计算 向量 和 矩阵 的多种范数&#xff0c;如 L1范数、L2范数、无穷范数 等。 1. 函数…...

【lc_hot100】刷题心得

链表 二叉树 二叉树相关的题目基本都有个基本的框架&#xff0c;基本框架就是二叉树的四种遍历方法&#xff1a;前序遍历、中序遍历、后序遍历、层序遍历 往往常用的是前序遍历和中序遍历 图 图跟二叉树一样都有自己的的基本框架&#xff0c;基本框架就是图的两种遍历方法&am…...

FANUC 数控 A06B-6058-H227 伺服放大器

‌发那科伺服放大器是一种控制电机的电子装置&#xff0c;属于电机控制系统的一部分&#xff0c;用于将输入信号放大并转换成电动机可以理解的信号&#xff0c;从而实现运动控制和定位。‌ 发那科伺服放大器的主要作用包括&#xff1a; ‌实现运动控制‌&#xff1a;通过控制…...

Python将表格文件中某些列的数据整体向上移动一行

本文介绍基于Python语言&#xff0c;针对一个文件夹下大量的Excel表格文件&#xff0c;对其中的每一个文件加以操作——将其中指定的若干列的数据部分都向上移动一行&#xff0c;并将所有操作完毕的Excel表格文件中的数据加以合并&#xff0c;生成一个新的Excel文件的方法。 首…...

基于YOLOv8的PCB缺陷检测算法,加入一种基于内容引导注意力(CGA)的混合融合方案(一)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文内容&#xff1a;针对基于YOLOv8的PCB缺陷检测算法进行性能提升&#xff0c;加入各个创新点做验证性试验。 1&#xff09;提出了一种基于内容引导注意力(CGA)的混合融合方案&#xff0c;mAP0.5由原始的0.966提升至0.975 1.PCB缺陷…...

如何在红米手机中恢复已删除的照片?(6 种方式可供选择)

凭借出色的相机和实惠的价格&#xff0c;小米红米系列已成为全球知名品牌。但是&#xff0c;最近有些人抱怨他们在 红米设备上丢失了许多珍贵的图片或视频&#xff0c;并希望弄清楚如何从小米手机恢复已删除的照片。好吧&#xff0c;在小米设备上恢复已删除的视频/照片并不难。…...

嵌入式实时操作系统(RTOS):原理、应用与发展

摘要&#xff1a;本文围绕嵌入式实时操作系统&#xff08;RTOS&#xff09;展开。首先介绍嵌入式系统与实时操作系统的概念&#xff0c;阐述嵌入式 RTOS 的体系结构。接着分析其关键特性&#xff0c;包含任务管理&#xff08;如任务的创建与删除、调度、同步与通信&#xff09;…...

C#里使用位图容器BitArray

由于经常需要操作一些位表示的数据结构,那么就需要采用位图的管理方式。 在C#里就是使用BitArray来管理位图数据结构,这样就比较方便处理。 这个类可以有多种构造函数,可以满足绝大部分的要求。 比如从网络协议里传送过来的字节流,就可以直接写入到里面,就可以直接获取…...

如何在 Kali Linux 上安装 pip3

如何在 Kali Linux 上安装 pip3 在 Kali Linux 上安装 pip3 的过程非常简单。按照以下步骤&#xff0c;你可以轻松完成安装并开始使用 pip3 管理 Python 软件包。 步骤 1&#xff1a;打开终端 首先&#xff0c;打开你的 Kali Linux 终端。 步骤 2&#xff1a;更新软件包列表…...

5.2 排列与代数余子式

一、求行列式的方法 计算机是利用主元计算行列式的。本节介绍其它两种计算行列式的方法。一是 “大公式”&#xff08;big formula&#xff09;&#xff0c;它使用了全部 n ! n! n! 个排列计算&#xff1b;二是 “代数余子式公式”&#xff08;cofactor formula&#xff09;&…...

java框架第五课(终极版本)SpringBoot

一.关于SpringBoot (1)回忆Spring 传统的Spring由Spring 框架(ioc,aop)加mybatis加Springweb组成&#xff0c;虽然相比原生的java程序Spring框架帮我们大大减少了代码量&#xff0c;减少了冗余&#xff0c;提高了开发效率但是由于Spring框架下的配置和相关的jar包依赖过多&am…...

聚类案例——汽车是否值得购买

对汽车是否值得购买&#xff0c;进行聚类分析&#xff1a; 1、数据指标解释&#xff1a; buying, 购买费用 maint, 维修费用 doors, 车门数量 person, 乘坐人数 lug_boot, 行李箱容量 safety, 安全性 2、对数据进行转换 将字符串转换映射量化为数字 数据加载&#xff1a…...

网络编程9.10

使用数据库完成工人管理系统: ubuntuubuntu:DB$ ubuntuubuntu:DB$ cat 2.c #include <myhead.h> #include <sqlite3.h> #include <string.h>typedef struct {int id;char name[20];double salary; } Worker;int do_insert(sqlite3 *ppDb) {Worker work;pri…...

如何在SQL Server中恢复多个数据库?

一次性恢复多个 SQL数据库吗可以吗&#xff1f; "是的&#xff0c;可以一次性恢复多个 SQL 数据库。通常情况下&#xff0c;只要备份文件的名称与相应的数据库匹配&#xff0c;且没有附加的日期或时间信息&#xff0c;就可以通过有效的 T-SQL 脚本来完成恢复。如果你希望…...

炸裂!新版 SD WebUI Forge 出图速度更快!支持最新Flux 模型!(保姆级安装教程)

大家是不是经常为SD WebUI卡顿、爆显存而苦恼?一启动SD 电脑就开始发烫&#xff0c; 尤其低显存用户屡屡"中招",不得不一遍遍重启。作为AI绘画的必备工具&#xff0c;WebUI却还有这么多"坑"&#xff0c;着实让人不爽!&#x1f620; 好消息是&#xff0c;…...

laserOdometry.cpp源码注释

本博客用于a-loam源码学习&#xff0c;用于和slam初学者一起学习。 #include <cmath>#include <nav_msgs/Odometry.h>#include <nav_msgs/Path.h> //这两行代码是C中包含头文件的指令&#xff0c;它们用于在ROS&#xff08;Robot Operating System&#xf…...

STM32时钟配置图详解

一图概述&#xff1a; 左侧输入时钟源 Input Frequency (LSE/LSI/HSI/HSE) LSE (Low-Speed External)&#xff1a;外部32.768 kHz晶体振荡器&#xff0c;通常用于RTC&#xff08;实时时钟&#xff09;。LSI (Low-Speed Internal)&#xff1a;内部低速时钟&#xff0c;频率为…...

Vscode——调试时,修改变量值

第一步&#xff1a;点击变量&#xff0c;鼠标右键 第二步&#xff1a;点击 设置值...

1. 初识LLM API:环境配置与多轮对话演示

其实AI应用并不是一个什么很高大上的东西&#xff0c;你可以将它当作一个文字的“调库”行为&#xff0c;“调库”只需要知道库名就行了&#xff0c;这里实际也是如此。甚至你只需要知道你想问什么&#xff0c;将你的消息作为输入&#xff0c;就能从大模型得到输出。而这个“库…...

【AI编程助手】VsCode插件--通义灵码

目录 摘要 一、插件安装 二、“通义灵码” 使用 三、官网教程 四、总结 五、参考信息 摘要 通义灵码是一款强大的 AI 编程助手。它能够理解编程相关的复杂逻辑&#xff0c;为开发者提供高效、准确的代码生成与优化建议。在编程过程中&#xff0c;它可以辅助处理各种任务&…...

9月10号的学习

//界面1 头文件 signals://界面1的自定义信号void my_signal(); private slots:void on_pushButton_2_clicked();void on_pushButton_clicked(); //界面1 .cpp文件 void Widget::on_pushButton_2_clicked() {QMessageBox msg(QMessageBox::Warning,"警告","是否…...

QtC++截图支持窗口获取

介绍 在截图工具中你会发现&#xff0c;接触到窗口后会自动圈出目标窗口,个别强大一点的还能进行元素识别可以自动圈出元素&#xff0c;那么今天简单分析一下QTc如何获取窗口并圈出当前鼠标下的窗口。 介绍1.如何获取所有窗口2.比较函数3.实现窗口判断 结尾 1.如何获取所有窗口…...

料品档案没有配置主供应商信息

这个问题经常会出现在普通用户的面前。没有合适的工程人员去打理料品档案。信息是缺漏的。用友给出来的提示&#xff0c;也让人摸不着头脑。只能是记下来备用吧。...

springboot属性加载优先级和常见命令行属性

属性加载优先级&#xff1a; 1.SpringApplication&#xff1a;启动的main方法里注入的属性 2.PropertySource&#xff1a;通过注解 加载的数据配置文件 3.Config data file&#xff1a;application.yml/.properties 4.OS environment variable&#xff1a;环境变量 5.Command l…...