3、Numpy中的通用函数

news2025/2/24 15:03:28

      

目录

数学运算

三角函数

比较函数

位运算函数

统计函数

布尔/逻辑函数

浮点函数

排序、搜索和计数函数


        在 NumPy 中,通用函数(通常称为ufunc)是一种对 ndarray 中的数据执行元素级运算的函数。这些函数是高度优化的、快速的向量化包装器,提供了简单的方法对数组中的所有元素执行相同的操作,而不需要编写循环语句。以下是一些常见的 NumPy 通用函数:

数学运算

  • np.add:元素级的数组加法。
  • np.subtract:元素级的数组减法。
  • np.multiply:元素级的数组乘法。
  • np.divide:元素级的数组除法。
  • np.sqrt:数组中每个元素的平方根。
  • np.power:将数组中的元素提升到指定的幂。
  • np.exp:计算数组中所有元素的指数 e^x。
  • np.lognp.log2np.log10:分别计算自然对数、以2为底和以10为底的对数。
import numpy as np

# 创建两个数组用于演示加法、减法、乘法和除法
a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])

# 加法
add_result = np.add(a, b)
print("Addition:", add_result)  # 结果: [ 6  8 10 12]

# 减法
subtract_result = np.subtract(b, a)
print("Subtraction:", subtract_result)  # 结果: [4 4 4 4]

# 乘法
multiply_result = np.multiply(a, b)
print("Multiplication:", multiply_result)  # 结果: [ 5 12 21 32]

# 除法
divide_result = np.divide(b, a)
print("Division:", divide_result)  # 结果: [5.  3.  2.33333333  2.]

# 创建一个数组用于演示平方根和幂运算
c = np.array([1, 4, 9, 16])

# 平方根
sqrt_result = np.sqrt(c)
print("Square root:", sqrt_result)  # 结果: [1. 2. 3. 4.]

# 幂运算
power_result = np.power(c, 2)
print("Power:", power_result)  # 结果: [  1  16  81 256]

# 创建一个数组用于演示指数和对数运算
d = np.array([1, 2, 3, 4])

# 指数
exp_result = np.exp(d)
print("Exponential:", exp_result)  # 结果: [ 2.71828183  7.3890561  20.08553692 54.59815003]

# 自然对数
log_result = np.log(d)
print("Natural logarithm:", log_result)  # 结果: [0.         0.69314718 1.09861229 1.38629436]

# 以2为底的对数
log2_result = np.log2(d)
print("Logarithm to the base 2:", log2_result)  # 结果: [0.         1.         1.5849625  2.        ]

# 以10为底的对数
log10_result = np.log10(d)
print("Logarithm to the base 10:", log10_result)  # 结果: [0.         0.30103    0.47712125 0.60205999]

三角函数

  • np.sin:数组元素的正弦。
  • np.cos:数组元素的余弦。
  • np.tan:数组元素的正切。
  • np.arcsinnp.arccosnp.arctan:计算反三角函数。
import numpy as np

# 创建一个角度数组,以弧度为单位(numpy的三角函数默认接受弧度值)
angles_radians = np.array([0, np.pi/2, np.pi, 3*np.pi/2])

# 计算正弦、余弦和正切
sin_values = np.sin(angles_radians)
cos_values = np.cos(angles_radians)
tan_values = np.tan(angles_radians)

print("Sine values: ", sin_values)  # 结果:[0. 1. 0. -1.]
print("Cosine values: ", cos_values)  # 结果:[1. 0. -1. 0.]
print("Tangent values: ", tan_values)  # 结果:[0. nan inf -0.]

# 计算反三角函数,给定一些在-1到1之间的值
inverses = np.array([-1, 0, 0.5, 1])  # 这些值对应于-π/2, 0, π/6, π/2的角度

arcsin_values = np.arcsin(inverses)
arccos_values = np.arccos(inverses)
arctan_values = np.arctan(inverses)

# 转换回角度制并打印结果
degrees = np.degrees([arcsin_values, arccos_values, arctan_values])

print("Degrees for arcsin: ", degrees[0])  # 结果:[-90.   0.  30.  90.]
print("Degrees for arccos: ", degrees[1])  # 结果:[90.   0. 120.  0.]
print("Degrees for arctan: ", degrees[2])  # 结果:[-45.   0.  45.  90.]

# 注意:由于arctan(-1)的结果是-pi/4,所以转换为角度时为-45度
# 同样,由于arcsin或arccos在边界值(-1和1)处返回的是±π/2,因此转换为角度时得到±90度
# 对于arccos(1),由于cos(0)=1,所以arccos(1)的结果是0弧度,即0度

比较函数

  • np.greaternp.greater_equal:逐元素比较两个数组(>, >=)。
  • np.lessnp.less_equal:逐元素比较两个数组(<, <=)。
  • np.equalnp.not_equal:逐元素比较两个数组的相等性(==, !=)。
import numpy as np

# 创建两个数组用于比较
x = np.array([1, 3, 5, 7])
y = np.array([2, 3, 4, 7])

# 使用 np.greater 检查 x 中的元素是否大于 y 中对应的元素
greater_result = np.greater(x, y)
print("Greater (>):", greater_result)
# 预期结果: [False False  True False]

# 使用 np.greater_equal 检查 x 中的元素是否大于等于 y 中对应的元素
greater_equal_result = np.greater_equal(x, y)
print("Greater or equal (>=):", greater_equal_result)
# 预期结果: [False  True  True  True]

# 使用 np.less 检查 x 中的元素是否小于 y 中对应的元素
less_result = np.less(x, y)
print("Less (<):", less_result)
# 预期结果: [ True False False False]

# 使用 np.less_equal 检查 x 中的元素是否小于等于 y 中对应的元素
less_equal_result = np.less_equal(x, y)
print("Less or equal (<=):", less_equal_result)
# 预期结果: [ True  True False  True]

# 使用 np.equal 检查 x 和 y 中对应元素是否相等
equal_result = np.equal(x, y)
print("Equal (==):", equal_result)
# 预期结果: [False  True False  True]

# 使用 np.not_equal 检查 x 和 y 中对应元素是否不等
not_equal_result = np.not_equal(x, y)
print("Not equal (!=):", not_equal_result)
# 预期结果: [ True False  True False]

位运算函数

  • np.bitwise_and:数组元素的位与操作。
  • np.bitwise_or:数组元素的位或操作。
  • np.bitwise_xor:数组元素的位异或操作。
  • np.bitwise_not:数组元素的位非操作。

统计函数

  • np.sum:计算数组元素的总和。
  • np.prod:计算数组元素的乘积。
  • np.mean:计算数组元素的平均值。
  • np.std:计算数组元素的标准差。
  • np.var:计算数组元素的方差。
  • np.minnp.max:查找数组中的最小值和最大值。
  • np.argminnp.argmax:查找数组中最小值和最大值的索引。
# np.sum():此函数用于计算数组中所有元素的总和。
# 一维数组
arr1 = np.array([1, 2, 3, 4, 5])
print(np.sum(arr1))  # 输出:15

# 二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(np.sum(arr2))  # 输出:21(所有元素之和)
print(np.sum(arr2, axis=0))  # 输出:[5, 7, 9](每一列之和)
print(np.sum(arr2, axis=1))  # 输出:[6, 15](每一行之和)

# np.prod():此函数计算数组中所有元素的乘积。
arr3 = np.array([1, 2, 3, 4, 5])
print(np.prod(arr3))  # 输出:120(所有元素相乘)

arr4 = np.array([[1, 2], [3, 4]])
print(np.prod(arr4))  # 输出:24(所有元素相乘)
print(np.prod(arr4, axis=0))  # 输出:[3, 8](对应位置元素相乘)
print(np.prod(arr4, axis=1))  # 输出:[2, 12](每一行元素相乘)

# np.mean():此函数计算数组元素的平均值。
arr5 = np.array([1, 2, 3, 4, 5])
print(np.mean(arr5))  # 输出:3.0(所有元素平均值)

arr6 = np.array([[1, 2], [3, 4]])
print(np.mean(arr6))  # 输出:2.5(所有元素平均值)
print(np.mean(arr6, axis=0))  # 输出:[2.0, 3.0](每一列平均值)
print(np.mean(arr6, axis=1))  # 输出:[1.5, 3.5](每一行平均值)

# np.std() 和 np.var():这两个函数分别计算数组元素的标准差和方差。
arr7 = np.array([1, 2, 3, 4, 5])
print(np.std(arr7))  # 输出:1.4142135623730951(标准差)
print(np.var(arr7))  # 输出:2.0(方差)

arr8 = np.array([[1, 2], [3, 4]])
print(np.std(arr8))  # 输出:1.118033988749895(所有元素的标准差)
print(np.var(arr8))  # 输出:1.25(所有元素的方差)
print(np.std(arr8, axis=0))  # 输出:[1., 1.](每一列的标准差)
print(np.var(arr8, axis=0))  # 输出:[1., 1.](每一列的方差)

# np.min() 和 np.max():这两个函数查找数组中的最小值和最大值。
arr9 = np.array([1, 2, 3, 4, 5])
print(np.min(arr9))  # 输出:1(最小值)
print(np.max(arr9))  # 输出:5(最大值)

arr10 = np.array([[1, 2], [3, 4]])
print(np.min(arr10))  # 输出:1(整个数组的最小值)
print(np.max(arr10))  # 输出:4(整个数组的最大值)
print(np.min(arr10, axis=0))  # 输出:[1, 2](每一列的最小值)
print(np.max(arr10, axis=0))  # 输出:[3, 4](每一列的最大值)

# np.argmin() 和 np.argmax():这两个函数返回数组中最小值和最大值对应的索引。
arr11 = np.array([1, 2, 3, 4, 5])
print(np.argmin(arr11))  # 输出:0(最小值的索引)
print(np.argmax(arr11))  # 输出:4(最大值的索引)

arr12 = np.array([[1, 2], [3, 4]])
print(np.argmin(arr12))  # 输出:0(整个数组中最小值的索引)
print(np.argmax(arr12))  # 输出:3(整个数组中最大值的索引)
print(np.argmin(arr12, axis=0))  # 输出:[0, 0](每一列最小值的索引)
print(np.argmax(arr12, axis=0))  # 输出:[1, 1](每一列最大值的索引)

布尔/逻辑函数

  • np.logical_andnp.logical_ornp.logical_notnp.logical_xor:逻辑运算。
import numpy as np

# 创建两个布尔数组用于逻辑运算
a = np.array([True, False, True, False])
b = np.array([True, True, False, False])

# 逻辑 AND 运算
logical_and_result = np.logical_and(a, b)
print("Logical AND:", logical_and_result)
# 预期结果: [ True False False False]

# 逻辑 OR 运算
logical_or_result = np.logical_or(a, b)
print("Logical OR:", logical_or_result)
# 预期结果: [ True  True  True False]

# 逻辑 NOT 运算
logical_not_result = np.logical_not(a)
print("Logical NOT:", logical_not_result)
# 预期结果: [False  True False  True]

# 逻辑 XOR 运算
logical_xor_result = np.logical_xor(a, b)
print("Logical XOR:", logical_xor_result)
# 预期结果: [False  True  True False]

        请注意,虽然这里的例子使用了布尔类型的数组,但逻辑运算函数也可以应用于非布尔类型的数组。在这种情况下,非零元素被视为 True,零元素被视为 False。 

浮点函数

  • np.isfinitenp.isinf:检测元素是否是有限的或无限的。
  • np.isnan:检测元素是否是 NaN(不是一个数字)。
import numpy as np

# 创建一个包含有限、无限和 NaN 值的数组
arr = np.array([1, np.inf, -np.inf, np.nan, 2])

# 检测元素是否是有限的
is_finite_result = np.isfinite(arr)
print("Is finite:", is_finite_result)
# 预期结果: [ True False False False  True]

# 检测元素是否是无限的
is_inf_result = np.isinf(arr)
print("Is infinite:", is_inf_result)
# 预期结果: [False  True  True False False]

# 检测元素是否是 NaN(不是一个数字)
is_nan_result = np.isnan(arr)
print("Is NaN:", is_nan_result)
# 预期结果: [False False False  True False]

排序、搜索和计数函数

  • np.sort:对数组进行排序。
  • np.argsort:返回排序的索引。
  • np.argmaxnp.argmin:找到最大值和最小值的索引。
  • np.nonzero:找到数组中非零元素的索引。
  • np.where:根据指定条件返回元素索引。

4、ndarray排序、搜索和计数函数-CSDN博客numpy其余常用函数参考:3、Numpy中的通用函数-CSDN博客在 NumPy 中,通用函数(通常称为ufunc)是一种对 ndarray 中的数据执行元素级运算的函数。这些函数是高度优化的、快速的向量化包装器,提供了简单的方法对数组中的所有元素执行相同的操作,而不需要编写循环语句。https://blog.csdn.net/sinat_34461199/article/details/135642638

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

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

相关文章

element中Table表格控件单选、多选功能进一步优化

目录 一、代码实现1、 父组件2、子组件&#xff08;弹框&#xff09; 二、效果图 一、代码实现 1、 父组件 <template><div><!-- 用户选择嵌套弹框 --><el-dialog :close-on-click-modal"false" :close-on-press-escape"false" tit…

史上最全的数据科学与艺术

1.背景介绍 数据分析是一种将数据转化为价值的艺术和科学。它涉及到大量的数学、统计、编程、数据库、机器学习等多个领域的知识。数据分析的目的是从数据中提取有用的信息&#xff0c;以便做出明智的决策。 数据分析的艺术体现在数据分析师需要具备丰富的经验和洞察力&#…

C语言第一弹---C语言基本概念(上)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 C语言基本概念 1、C语言是什么&#xff1f;2、C语言的历史和辉煌3、编译器的选择VS20223.1、编译和链接3.2、编译器对比3.3、VS2022优缺点 4、VS项目和源文件、头…

从零开始搭建个人代理IP池的全程实录

创建个人代理IP池是一项相对复杂的技术任务&#xff0c;涉及到网络爬虫、服务器运维、数据库管理等多个领域。下面我将提供一个简化的步骤指南&#xff0c;但请注意这需要一定的编程基础和网络知识&#xff1a; 1. 获取IP资源&#xff1a; - 从免费或付费的代理IP提供商处获取I…

【视觉SLAM十四讲学习笔记】第五讲——相机模型

专栏系列文章如下&#xff1a; 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧拉角 【视觉SLAM十四讲学习笔记】第三讲——四元…

Angular系列教程之zone.js和NgZone

文章目录 什么是zone.jsZone的工作原理Zone的常见用途NgZone&#xff1a;Angular中的zone.js使用NgZone使用NgZone执行代码使用NgZone外部检测 结论 什么是zone.js 在Angular中&#xff0c;zone.js是一个非常重要的库&#xff0c;它为我们提供了一种跟踪和管理异步操作的机制。…

将某个GitLab上的项目自动同步到另一个GitLab账户下的仓库

引言 我们在进行项目迁移&#xff0c;或者是给甲乙外包写项目&#xff0c;需要迁移代码或者同步更新时&#xff0c;所处于的GitLab地址是不一样的&#xff0c;那么我们如何进行同步呢&#xff1f;我们可能第一时间会想到&#xff0c;先拉A地址的代码到本地&#xff0c;然后覆盖…

【SpringCloud】这一次终于使用MQ解决了Eureka服务下线延迟感知问题

前言 其实&#xff0c;“通过Redis手动更新Ribbon缓存来解决Eureka微服务架构中服务下线感知的问题”是一种解&#xff0c;但不是最优解 1.痛点 上一篇文章的标题是&#xff1a; 通过Redis手动更新Ribbon缓存来解决Eureka微服务架构中服务下线感知的问题 当时在文章的末尾就…

【Flutter 开发实战】Dart 基础篇:List 详解

嗨&#xff0c;各位朋友们&#xff0c;欢迎来到这篇博客&#xff01;今天我们将一起踏入 Dart 语言的神奇世界&#xff0c;深入了解 Dart 中的 List 类型。不用担心&#xff0c;我会尽可能用最通俗易懂的语言&#xff0c;让你对 List 有一个更深刻的理解。 Dart 中的 List Li…

重学Java 7 数组Arr.1

我欲与君相知&#xff0c;长命无绝衰 ——24.1.16 一、数组的定义 1.概述&#xff1a;数组是一个容器&#xff0c;数组本身属于引用数据类型 2.作用&#xff1a;一次存储多个数据 3.特点&#xff1a; ①既可以存储基本类型的数据&#xff0c;也可以存储引用类型的数据 ②定长&a…

Redis 消息队列和发布订阅

文章目录 基本模式生产者消费者原理&模型redis实现java实现 发布者订阅者原理&模型redis实现java实现 stream模式原理&模型工作原理redis实现Java实现 选型外传 基本模式 采用redis 三种方案&#xff1a; ● 生产者消费者&#xff1a;一个消息只能有一个消费者 ●…

计算机毕业设计 基于SSM的历史/博物馆藏系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

一天吃透计算机网络面试八股文

目录&#xff1a; 网络分层结构三次握手两次握手可以吗&#xff1f;四次挥手第四次挥手为什么要等待2MSL&#xff1f;为什么是四次挥手&#xff1f;TCP有哪些特点&#xff1f;说说TCP报文首部有哪些字段&#xff0c;其作用又分别是什么&#xff1f;TCP和UDP的区别&#xff1f;…

DWM1000 MAC层

DWM1000 MAC层 MAC层 概述 MAC层&#xff0c;即媒体访问控制层&#xff0c;是数据通信协议栈中的一个重要部分&#xff0c;位于链路层的下半部分&#xff0c;紧邻物理层。在OSI模型中&#xff0c;它属于第二层&#xff0c;即数据链路层的一部分。MAC层的主要职责是控制如何在…

去中心化社交:Web3如何重新定义社交媒体

随着区块链技术的快速发展&#xff0c;Web3正在崭露头角&#xff0c;成为社交媒体领域的一股新潮流。去中心化社交的理念与技术创新正在重新定义用户的社交体验&#xff0c;颠覆传统社交媒体的中心化模式。本文将深入探讨Web3对社交媒体的影响&#xff0c;以及去中心化社交是如…

Ubuntu使用QtCreator + CMake 开发C/C++程序

平台 OS: Ubuntu 20.04 cmake: 3.16.3 IDE: Qt Creator 4.11.1 Based on Qt 5.14.1 (GCC 5.3.1 20160406 (Red Hat 5.3.1-6), 64 bit) Built on Feb 5 2020 12:48:30 From revision b2ddeacfb5 Copyright 2008-2019 The Qt Company Ltd. All rights reserved. The program …

DC电源模块在新能源领域的应用前景

BOSHIDA DC电源模块在新能源领域的应用前景 DC电源模块在新能源领域有着广阔的应用前景。随着可再生能源技术的发展和普及&#xff0c;如太阳能和风能等的应用逐渐增多&#xff0c;DC电源模块在这些领域的应用越来越重要。 首先&#xff0c;DC电源模块可以用于太阳能发电系统…

transfomer中正余弦位置编码的源码实现

简介 Transformer模型抛弃了RNN、CNN作为序列学习的基本模型。循环神经网络本身就是一种顺序结构&#xff0c;天生就包含了词在序列中的位置信息。当抛弃循环神经网络结构&#xff0c;完全采用Attention取而代之&#xff0c;这些词序信息就会丢失&#xff0c;模型就没有办法知…

子域名的介绍及收集

1、子域名作用编辑 收集子域名可以扩大测试范围&#xff0c;同一域名下的二级域名都属于目标范围。 2、 常用方式编辑 子域名中的常见资产类型一般包括办公系统&#xff0c;邮箱系统&#xff0c;论坛&#xff0c;商城&#xff0c;其他管理系统&#xff0c;网站管理后台也有可…

获得店铺的所有商品 API、店铺列表api

taobao.item_search_shop 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_shop等]cacheStrin…