math模块篇(四)

文章目录

  • math.ldexp(x, i)
  • math.modf(x)
  • math.nextafter(x, y, steps=1)
  • math.perm(n, k=None)
  • math.prod(iterable, *, start=1)

math.ldexp(x, i)

math.ldexp(x, i) 是 Python 中 math 模块的一个函数,用于执行二进制标度操作。它接受两个参数:尾数(mantissa)x 和指数(exponent)i,然后返回 x * (2**i) 的结果。这个函数的名字 “ldexp” 来自 “load exponent” 的缩写,意味着这个函数用于加载或应用一个指数到给定的尾数上。

math.ldexp() 通常用于执行与浮点数表示相关的低级操作,尤其是在处理二进制浮点数表示时。

下面是一些使用 math.ldexp() 的例子:

import math

# 使用 ldexp 进行二进制标度操作
print(math.ldexp(1.5, 3))  # 输出: 12.0
# 解释:1.5 * (2**3) = 1.5 * 8 = 12.0

print(math.ldexp(0.5, -2))  # 输出: 0.125
# 解释:0.5 * (2**-2) = 0.5 * 0.25 = 0.125

# 尾数可以是任意浮点数
print(math.ldexp(3.0, 1))  # 输出: 6.0

# 指数可以是任意整数
print(math.ldexp(1.0, 100))  # 输出: 一个非常大的数

# 如果尾数是 0,结果总是 0,无论指数是多少
print(math.ldexp(0.0, 42))  # 输出: 0.0

在这些例子中,你可以看到 math.ldexp() 如何通过应用二进制指数来缩放给定的尾数。这个函数在需要直接操作浮点数的二进制表示时非常有用,例如在低级编程、数值分析或科学计算中。

math.modf(x)

math.modf(x) 是 Python 中 math 模块的一个函数,用于将一个浮点数 x 分解为整数部分和小数部分。它返回两个值:x 的整数部分和分数部分(即小数部分)。这两个值作为一个包含两个元素的元组返回,第一个元素是整数部分,第二个元素是小数部分。

math.modf(x) 的名字来自 “modulo function”,虽然它实际上并不执行模数运算(即求余数)。在数学中,“modf” 通常指的是 “modulo function”,但在 Python 的 math 模块中,modf 是用来进行浮点数分解的。

下面是一些使用 math.modf() 的例子:

import math

# 分解浮点数
integer_part, fractional_part = math.modf(7.3)
print(integer_part)    # 输出: 7.0
print(fractional_part)  # 输出: 0.3

# 另一个例子
int_part, frac_part = math.modf(-2.71828)
print(int_part)      # 输出: -3.0
print(frac_part)     # 输出: 0.28172

# 对于正整数,小数部分为 0.0
int_part, frac_part = math.modf(42)
print(int_part)      # 输出: 42.0
print(frac_part)     # 输出: 0.0

# 对于负整数,整数部分带有负号,小数部分为 0.0
int_part, frac_part = math.modf(-10)
print(int_part)      # 输出: -10.0
print(frac_part)     # 输出: 0.0

在这个例子中,math.modf(x) 函数将浮点数 x 分解为整数部分和小数部分,并将它们作为元组返回。整数部分总是向负无穷大方向取整(即向零的左侧取整),而小数部分则是 x 减去整数部分的结果。

math.nextafter(x, y, steps=1)

math.nextafter(x, y) 是 Python 中 math 模块的一个函数,它返回 x 之后的下一个可表示的浮点数,这个浮点数在浮点数序列中紧挨着 x 并且朝着 y 的方向。如果没有指定 steps 参数,或者 steps 为 1,那么 math.nextafter(x, y) 就返回 x 之后的下一个可表示的浮点数。如果 steps 大于 1,那么函数会返回 x 之后的第 steps 个可表示的浮点数。

这个函数在需要遍历浮点数的序列,或者在两个浮点数之间寻找中间值时非常有用。由于浮点数的表示是不连续的,math.nextafter() 提供了一种确定的方式来找到序列中的下一个或第 n 个浮点数。

下面是一些使用 math.nextafter() 的例子:

import math

# 查找 1.0 之后的下一个浮点数
print(math.nextafter(1.0, 2.0))  # 输出: 1.0000000000000002

# 查找 3.0 之前的下一个浮点数
print(math.nextafter(3.0, 2.0))  # 输出: 2.9999999999999996

# 查找 0.0 之后的第 3 个浮点数
print(math.nextafter(0.0, 1.0, 3))  # 输出: 4.9406564584124654e-324

# 查找 1.0 和 2.0 之间的中间值
mid_value = math.nextafter(1.0, 2.0) / 2
print(mid_value)  # 输出: 0.5000000000000001

# 注意:由于浮点数的精度限制,结果可能不会完全符合预期

在这个例子中,math.nextafter() 函数用于找到给定浮点数 x 之后(或之前,如果 y 小于 x)的下一个可表示的浮点数。由于浮点数的精度限制,结果可能不会完全符合预期,尤其是在接近 0 或非常大/小的值时。因此,在使用这个函数时,需要考虑到浮点数的精度问题。

math.perm(n, k=None)

math.perm(n, k=None) 是 Python 3.8 版本中新增的一个函数,它用于计算从 n 个不同元素中取出 k 个元素的所有排列的个数。这个函数实际上计算的是排列数(Permutation),数学上通常表示为 P(n, k) 或 nPk。

如果 k 没有被指定或者为 None,则默认 k 的值为 n,计算的是 n 的阶乘(即 n!)。

函数的签名如下:

math.perm(n, k=None)

其中:

  • n 是整数,表示集合中元素的数量。
  • k 也是整数,表示要选择的元素数量。如果为 None,则默认为 n。

这里有一些使用 math.perm() 的例子:

import math

# 计算 5 的阶乘(即 5!)
print(math.perm(5))  # 输出: 120.0

# 计算从 5 个元素中取 3 个元素的排列数(即 P(5, 3))
print(math.perm(5, 3))  # 输出: 60.0

# 计算从 7 个元素中取 7 个元素的排列数(即 P(7, 7),也等于 7 的阶乘)
print(math.perm(7, 7))  # 输出: 5040.0

# 如果 k 大于 n,则结果为 1.0,因为没有足够的元素可以排列
print(math.perm(3, 4))  # 输出: 1.0

请注意,由于这个函数计算的是阶乘和排列数,结果可能非常快就变得非常大,特别是对于较大的 n 和 k 值。此外,由于浮点数精度的限制,对于非常大的结果,可能会有一些精度损失。

如果你需要处理非常大的排列数或者需要更高的精度,可能需要考虑使用专门的数学库,如 mpmath,或者使用其他方法来计算排列数,比如通过迭代方式逐步计算阶乘。

math.prod(iterable, *, start=1)

math.prod(iterable, *, start=1) 是 Python 3.8 版本中新增的一个函数,用于计算可迭代对象(iterable)中所有元素的乘积。这个函数返回 iterable 中所有元素与 start 的乘积。如果 start 没有被指定,则默认为 1。

iterable 可以是一个列表、元组、集合或其他任何可迭代对象,包含用于计算的数字。这些数字可以是整数或浮点数。

  • 在函数签名中是一个特殊的语法,用于指示关键字参数的开始。这意味着所有在 * 之后的参数都必须以关键字参数的形式传递。

下面是一些使用 math.prod() 的例子:

import math

# 计算一个列表中所有元素的乘积
numbers = [1, 2, 3, 4]
product = math.prod(numbers)
print(product)  # 输出: 24

# 使用起始值
product_with_start = math.prod(numbers, start=10)
print(product_with_start)  # 输出: 240

# 计算一个元组中所有元素的乘积
tuple_of_numbers = (1, 2, 5, 10)
tuple_product = math.prod(tuple_of_numbers)
print(tuple_product)  # 输出: 100

# 计算一个集合中所有元素的乘积(注意集合是无序的)
set_of_numbers = {2, 3, 5}
set_product = math.prod(set_of_numbers)
print(set_product)  # 输出: 30

# 如果 iterable 为空,且 start 为 1,则结果为 1
empty_product = math.prod([])
print(empty_product)  # 输出: 1

# 如果 iterable 为空,但 start 不为 1,则结果为 start
empty_product_with_start = math.prod([], start=2)
print(empty_product_with_start)  # 输出: 2

在这些例子中,math.prod() 函数计算了给定可迭代对象中所有元素的乘积,并且可以选择性地使用一个起始值来计算乘积。如果可迭代对象是空的,且起始值为 1,则结果也是 1。如果起始值不为 1,则结果为起始值本身。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql--事务四大特性与隔离级别

事务四大特性与隔离级别 mysql事务的概念事务的属性事务控制语句转账示例 并发事务引发的问题脏读脏读场景 不可重复读幻读幻读场景 事务的隔离级别读未提交读已提交可重复读(MySQL默认) 总结 mysql事务的概念 事务就是一组操作的集合,他是一…

春秋云境CVE-2022-24663

简介 远程代码执行漏洞,任何订阅者都可以利用该漏洞发送带有“短代码”参数设置为 PHP Everywhere 的请求,并在站点上执行任意 PHP 代码。P.S. 存在常见用户名低权限用户弱口令 正文 进入首页我们没看到任何有价值的东西,那么就只好去寻找…

【LeetCode】升级打怪之路 Day 28:回溯算法 — 括号生成 删除无效的括号

今日题目: 22. 括号生成301. 删除无效的括号 参考文章: 回溯算法:括号生成回溯算法:删除无效的括号 这是两道使用回溯算法来解决与括号相关的问题,具备一定的难度,需要学习理解。 通过第一道题“括号生成”…

Vivado使用(2)——综合运行与OOC

目录 一、综合运行 二、OOC 2.1 如何设置 OOC 模块 2.2 存根文件和黑盒属性 2.3 使用限制 2.4 另一种设置方法 一、综合运行 一个“运行(run)”是指定义和配置设计在综合过程中的各方面,包括:使用到约束,针对的…

Java常见限流用法介绍和实现

目录 一、现象 二、工具 ​​​​​​1、AtomicInteger,AtomicLong 原子类操作 ​​​​​​2、RedisLua ​​​​​​3、Google Guava的RateLimiter 1) 使用 2) Demo 3) 优化demo 4、阿里开源的Sentinel 三、算法 1、计数限流 &…

Java实现猜数字游戏:编程入门之旅

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

HDFS的Shell操作及客户端配置方法

HDFS进程启停命令 Hadoop HDFS组件内置了HDFS集群的一键启停脚本。 $HADOOP_HOME/sbin/start-dfs.sh,一键启动HDFS集群$HADOOP_HOME/sbin/stop-dfs.sh,一键关闭HDFS集群 执行原理: 在执行此脚本的机器上,启动(关闭&…

二叉树|538.把二叉搜索树换为累加树

力扣题目链接 class Solution { private:int pre 0; // 记录前一个节点的数值void traversal(TreeNode* cur) { // 右中左遍历if (cur NULL) return;traversal(cur->right);cur->val pre;pre cur->val;traversal(cur->left);} public:TreeNode* convertBST(Tre…

阎淑萍:老母猪戴口罩还挺重视这张老脸啊,赵本山:我也相当副科级呀!

阎淑萍:老母猪戴口罩还挺重视这张老脸啊,赵本山:我也相当副科级呀! ——小品《老拜年》(上)的台词 《老拜年》 是赵本山、阎淑萍、王中青、苏杰在《1993年中央电视台春节联欢晚会》上表演的小品&#xff0…

web全栈架构师第16期教程

教程介绍 互联网时代已进入后半场,行业环境发生了显著变化。互联网人,尤其是技术人员,如何在加速更迭的技术浪潮中持续充电,提升自身价值,是当下必须面对的挑战。课程涉及了现下前端实际开发时所需要的各块内容&#…

发现数据异常波动怎么办?别慌,指标监控和归因分析来帮你

企业搭建完善、全面的指标体系是企业用数据指导业务经营决策的第一步。但是做完指标之后,对指标的监控,经常被大家忽视。当指标发生了异常波动(上升或下降),需要企业能够及时发现,并快速找到背后真实的原因…

Xcode删除原本的Git,再添加新的git

本文参考:Xcode怎么删除原本git,在重新设置新的git地址_ios xcode 删除原本git-CSDN博客 开发中会有一个问题。Xcode项目A 提交到Git服务器server1,此时项目A内部已经存在一个Git文件,与server1相关联。 此时你想将项目A提交到 另一个Git…

算法打卡day30|贪心算法篇04|Leetcode 860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

算法题 Leetcode 860.柠檬水找零 题目链接:860.柠檬水找零 大佬视频讲解:柠檬水找零视频讲解 个人思路 5元最通用,然后是10元,所以如果是对于20元找零直接先找10元,也涉及到贪心的思想,可以用贪心算法。 解法 贪心法…

加密流量分类torch实践5:TrafficClassificationPandemonium项目更新3

加密流量分类torch实践5:TrafficClassificationPandemonium项目更新3 更新日志 代码已经推送开源至露露云的github,如果能帮助你,就给鼠鼠点一个star吧!!! 我的CSDN博客 我的Github Page博客 3/23日更新…

打造核心竞争力:高效Web系统数据中台的设计与实践_光点科技

在数字化的浪潮中,数据已经成为企业赖以生存和发展的核心资源。一个高效的Web系统数据中台,能够赋予企业在激烈的市场竞争中立于不败之地的能力。本文将深入探讨如何设计和实施一个能够提升企业数据管理水平和支持业务决策的高效数据中台架构。 数据中台…

基于Python实现多功能翻译助手(下)

为了将上述步骤中的功能增强与扩展具体化为代码,我们将实现翻译历史记录功能、翻译选项配置以及UI的改进。 翻译历史记录功能 import json # 假设有一个用于存储历史记录的json文件 HISTORY_FILE translation_history.json # 初始化历史记录列表 translati…

数组---

1、数组的定义 Java中,数组存储固定大小的同类型元素。 数组是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一的管理。 数组的特点: 数组本身是引用数据类型,但数组中的…

Spring使用(一)注解

Spring使用 资源 Spring 框架内部使用 Resource 接口作为所有资源的抽象和访问接口,在上一篇文章的示例代码中的配置文件是通过ClassPathResource 进行封装的,ClassPathResource 是 Resource 的一个特定类型的实现,代表的是位于 classpath …

vue3+Pinia的使用 - 封装

目录: persist.ts 可存储到本地 import { PersistedStateOptions } from "pinia-plugin-persistedstate";/*** description pinia 持久化参数配置* param {String} key 存储到持久化的 name* param {Array} paths 需要持久化的 state name* return per…

基于Transformer的医学图像分类研究

医学图像分类目前面临的挑战 医学图像分类需要研究人员同时具备医学图像分析和数字图像的知识背景。由于图像尺度、数据格式和数据类别分布的影响,现有的模型方法,如传统的机器学习的识别方法和基于深度卷积神经网络的方法,取得的识别准确度…
最新文章