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

news2024/9/21 20:46:02

引言

书接上回,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 np

arr = 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算法工程师》)!!!

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

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

相关文章

shader 案例学习笔记之smoothstep函数

参考&#xff1a;smoothstep 用来生成0-1的平滑过渡值 smoothstep函数源码实现&#xff1a; float smoothstep(float t1, float t2, float x) {// Scale, bias and saturate x to 0..1 rangex clamp((x - t1) / (t2 - t1), 0.0, 1.0); // Evaluate polynomialreturn x * x *…

@rem和rem用法和区别

在Windows的命令提示符&#xff08;cmd&#xff09;中&#xff0c;rem和rem都是用来注释批处理脚本的。 用法&#xff1a; rem&#xff1a;在一行的开头使用&#xff0c;注释只对当前行有效。rem&#xff1a;也在一行的开头使用&#xff0c;注释会一直持续到下一行。 区别&a…

基于SpringBoot的在线汽车租赁信息管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的在线汽车租赁信息…

STM32 HAL freertos零基础(五) STM32CubeMX配置完成后自定义二值信号量 解决二值信号量初始值为1问题

1、简介 通过上文虽然实现了二值信号量实战&#xff0c;但每次配置STM32CubeMX二值信号量都恢复默认值1&#xff0c;为了解决该问题&#xff0c;对于二值信号量通过CubeMX配置完成后&#xff0c;在程序内自定义二值信号量。 2、文件建立 建立BinarySem文件夹添加BinarySem.c…

Selenium自动化测试网页加载太慢如何解决(超详细)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 遇到网页加载慢&#xff0c;selenium运行效率降低&#xff0c;可以通过修改页面加载策略提升自动化效率。 selenium加载很慢 通过URL导航到新页面时&#xff0c;…

利用平板电脑和谷歌浏览器进行在线教育学习

在数字化时代&#xff0c;教育的形式越来越多样化&#xff0c;特别是在线教育的兴起为学习带来了前所未有的便利。对于经常在平板电脑上进行学习的用户来说&#xff0c;谷歌浏览器提供了强大的功能&#xff0c;帮助用户更有效地学习。本文将指导您如何在使用平板电脑和谷歌浏览…

系统工程建模MBSE

################################# ############# 片段一 ############## ################################# 下图采用“V”模式显示了集成的基于模型的系统/嵌入式软件开发流程Harmony。左侧描述了自顶向下的设计流程,而右侧显示了自底而上的从单元测试到最终系统验收测试…

‌语音控制小夜灯的实现方案介绍

‌语音控制小夜灯的实现方案组成部分‌ 语音控制小夜灯的实现方案主要包括硬件组装和软件编程两个部分。‌ ‌硬件组装‌涉及将语音声控模块、灯泡、USB连接线等组件正确连接。首先&#xff0c;使用螺丝刀和螺丝将四个隔离柱固定在底板四个拐角处&#xff0c;同时将语音声控模…

Linux CentOS更换阿里云源解决Could not retrieve mirrorlist http://mirrorlist.centos.org

Linux CentOS7 更新yum 操作的时候出现这个问题&#xff1a; Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org 然后我执行 grep -nr "mirrorlist.centos.org" /etc/yum.repos.d/* 出现 这个问题时可以…

2023下半年软考网络规划

【考情分析】2023下半年软考网络规划设计师机考考情分析-真题解析公开课视频&#xff01;_哔哩哔哩_bilibili2023年11月软考网络规划设计师案例分析解析与考后复盘_哔哩哔哩_bilibili全网首发&#xff01;2023年下半年软考【高级】网规真题试卷--案例分析&#xff08;部分回忆版…

如何优化谷歌排名更有效?

要想提高排名&#xff0c;首先得从用户的角度出发。要想他们在搜索时最关心什么问题&#xff0c;急需解决哪些痛点&#xff0c;之后要做的就是创建GHA高质量内容&#xff0c;创建内容时尽量深入探讨这些问题&#xff0c;而不是泛泛而谈。内容要自然&#xff0c;尽量避免过多的关…

北京等你!网易云信参加第五届中国银行数智峰会

随着数字中国建设的持续深入&#xff0c;以及大数据、云计算、AI、融合通信等技术在银行业务场景中的应用&#xff0c;银行业正在经历新一轮的数智化转型与革新。 数字化转型不仅是技术层面的升级&#xff0c;更是业务模式和运营方式的全面革新。比如智能虚拟客服、数字银行等的…

软件测试学习笔记丨Postman实战练习

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/32096#h-22 二、实战练习 2.1 宠物商店接口文档分析 接口文档&#xff1a;http://petstore.swagger.io &#xff0c;这是宠物商店接口的 swagger 文档。 2.1.1 什么是 swagger Swagger 是…

更改flutter 应用的应用名称和图标

在 Flutter 项目中&#xff0c;更改构建后的应用名称和图标是常见的定制化需求。以下是如何更改应用名称和图标的步骤。 1. 更改应用名称 Android 平台 修改 Android 端的应用名称&#xff1a; Flutter 项目的 Android 部分位于 android/app/src/main/AndroidManifest.xml …

高度可定制的电竞鼠标,雷柏VT1 PRO MAX体验

不管是菜鸟还是老鸟&#xff0c;游戏玩到某个阶段很容易出现瓶颈&#xff0c;在游戏的某个阶段&#xff0c;这里面制约最大的除了操作之外&#xff0c;实际上还是我们用的硬件。比如在PC游戏中&#xff0c;鼠标的影响就非常大&#xff0c;像是在游戏中如果鼠标延迟过高&#xf…

每天五分钟玩转深度学习框架PyTorch:获取神经网络模型的参数

本文重点 当我们定义好神经网络之后,这个网络是由多个网络层构成的,每层都有参数,我们如何才能获取到这些参数呢?我们将再下面介绍几个方法来获取神经网络的模型参数,此文我们是为了学习第6步(优化器)。 获取所有参数Parameters from torch import nn net=nn.Sequent…

责任链模式chain of responsibility

学习笔记&#xff0c;原文链接 https://refactoringguru.cn/design-patterns/chain-of-responsibility 将请求沿着处理者链进行发送。 收到请求后&#xff0c; 每个处理者均可对请求进行处理&#xff0c; 或将其传递给链上的下个处理者 把责任链造出来然后往后传

SQL的高级查询练习知识点中(day25)

1 学习目标 重点掌握聚合函数的使用重点掌握字段别名重点掌握分组查询的语法重点掌握having的使用方法了解子查询的语法重点掌握排序查询语法 2 排序查询 2.1 语法 SELECT要查询的东西 FROM表 WHERE 条件 ORDER BY 排序的字段|表达式|函数|别名 [ASC|DESC] ASC 升序&#…

Mendix 10.14 版 – 新版本上线及新功能点介绍

Mendix 10.14版本的全部内容都是“连接点”——从简化Studio Pro中的编辑体验到用于连接到其他系统的强大更新。 Studio Pro已针对性能进行了优化&#xff0c;用户现在可以直接在属性窗格中更改样式。现在也可以在系统文本编辑器中使用Maia&#xff08;AI&#xff09;进行翻译…

Java中的类加载与卸载机制详解

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;类加载和类卸载机制是Java运行时环境的重要组成部分。理解类的加载与卸载不仅有助于深入掌握JVM的运行原理&#xff0c;还可以帮助开发者优化程序性能&#xff0c;特别是在内存管理和应用程序生命周期管理中起到关键作用…