栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > 学术 > 人文期刊 > 电脑报

四种Python均匀浮点数生成方法

电脑报 更新时间: 发布时间: 学术归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

四种Python均匀浮点数生成方法

牟晓东

众所周知,在Python中可构造“for i in range(100):”语句来执行100次循环,因为“range(100)”就相当于“range(0,100,1)”,是以1为步长、左闭(包括0)右开(不包括100)的;如果在该循环中被执行的语句是“print(i,end=‘ )”的话,那就会打印输出0、1、2……98、99共100个整数。按照这个办法是否可以使用range()函数来生成类似的均匀浮点数呢?比如0.00、0.01、0.02……0.98、0.99共100个浮点数。如果直接构造“for i in range(0,1,0.01):”,Python就会给出“TypeError: ‘float object cannot be interpreted as an integer”的错误提示,意思是“类型错误:浮点型对象不能解释为整数型”,因为range()函数接收的参数必须是整数(可以是负数),而不能直接处理float浮点数。那么,如何解决均匀浮点数生成问题呢?

方法1:while循环控制变量i自增

首先建立并给变量i赋值为0.00;接着构造“while i <= 1.00:”循环,其中的第一条语句为“print(‘%.2f%i,end=‘ )”,即以一个空格分隔并保留两位小数输出变量i的值;第二条语句为“i += 0.01”,即控制i的自增,步长为0.01。运行程序,得到了从0.00到0.99共100个均匀浮点数(如图1)。

方法2:使用列表推导式

Python的列表推导式非常灵活,能够以非常简洁的方式来快速生成满足特定需求的列表。比如直接使用一条“my_list = [i/100 for i in range(100)]”语句,即可在列表my_list中得到符合要求的100个浮点数,其实就是将“for i in range(100)”所得到的0-99分别进行了“i/100”的计算。最后再使用for循环以同样的方式来打印输出,同样也得到了100个均匀浮点数,print中的“‘%.2f%”表示显示保留两位小数的浮点数(如图2)。

方法3:借用numpy庫中的arange()

numpy库中有个与Python的range()函数功能类似的arange(),但它支持浮点数运算且使用方法类似,一样是“初始值、终值、步长”参数调用。在使用“import numpy as np”语句以np为别名导入numpy库之后,再使用“my_list = list(np.arange(0,1,0.01))”语句,即可将arange()生成的ndarray数组对象转换为列表数据。最后,使用for循环打印输出my_list中的所有元素,就得到了100个均匀浮点数,本次保留3位小数(如图3)。

方法4:自定义函数使用yield表达式

既然Python内置的range()函数不提供对浮点数的运算,那我们就可以自定义一个float_data()函数,三个参数依次为start、end和step,同样是对应“初始值、终值、步长”。函数中使用变量i来接收初始值,然后通过while循环(当i

在主程序中调用float_data()函数,接收到的数据存储至变量my_generator中,最后仍然是通过for循环来将它们打印输出,也可以得到100个均匀浮点数(如图4)。

四种方法均能实现均匀浮点数的生成,大家可根据自己的编程习惯来使用。当然,如果想生成的是0.000、0.001、0.002……0.999这样的千分位均匀浮点数,只要在程序中将步长修改为0.001、print输出“%.3f”以及方法2中将“i/100”修改为“i/1000”即可。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/xueshu/245893.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号