精华内容
下载资源
问答
  • python 浮点数的精度问题

    千次阅读 2018-07-19 08:45:47
    程序语言浮点数由单精度型和双精度型... python 3 浮点数默认的是 17位数字的精度 将精度高的浮点数转化成精度低的浮点数,内置方法 round() roud(2.873 , 2) ===> 2.87 格式化 %.2f 保留两位小数 ...
    1. 程序语言浮点数由单精度型和双精度型两种

      单精度型占4个字节32位的内存空间只能提供七位有效数字

      双精度型占8个字节64位的内存空间可提供17位有效数字

    2. python 3 浮点数默认的是 17位数字的精度

    3. 将精度高的浮点数转化成精度低的浮点数,内置方法 round() roud(2.873 , 2) ===> 2.87

      格式化 %.2f 保留两位小数

    4. python 的浮点数损失精度问题,python 是以双精度64位来保存浮点数,多余的位会被截掉,比如 0.1 ,电脑保存的不是精准的 0.1 ,而是 0.10000000001,参与运算后,就会产生误差,特别是哪些对精度要求高的,比如金融领域,

    5. 解决方法, round 方法 或 利用 decimal 模块 /raʊnd/ 英/'desɪm(ə)l/ 来解决浮点数精度问题,规定浮点数只到小数点几位数

     

    展开全文
  • 本文所用环境:Python 3.6.5 |Anaconda custom (64-bit)|引言由于某些原因,需要用python读取二进制文件,这里主要...这里主要讨论,python二进制转浮点数的操作。python中一个float类型的数4个字节。二进制数据转...

    本文所用环境:

    Python 3.6.5 |Anaconda custom (64-bit)|

    引言

    由于某些原因,需要用python读取二进制文件,这里主要用到struct包,而这个包里面的方法主要是unpack、pack、calcsize。详细介绍可以看:Python Struct 官方文档。这里主要讨论,python二进制转浮点数的操作。

    python中一个float类型的数占4个字节。

    二进制数据转float,可以用struct.unpack()来实现。

    小文件读取

    较小的文件,可以一次读取:

    首先导入所需的包:

    import numpy as np

    import struct

    Python

    例如:我需要读取一个名为filename,存放着形状为[100,1025]的浮点数的文件。可以采用以下办法

    # 加载测试数据

    f = open('filename','rb')

    # 102500为文档中包含的数字个数,而一个浮点数占4个字节

    data_raw = struct.unpack('f'*102500,f.read(4*102500))

    f.close()

    verify_data = np.asarray(verify_data_raw).reshape(-1,1025)

    大文件处理方法

    我需要处理的文件大小有38.1G,存放着[10000000,1025]大小的向量。

    关于大文件的处理,我参考了这文章,但是,这个方法不能很好的将二进制文件转换成浮点数。

    所以我想到了另外一种办法:

    通过Linux命令切割文件

    通过split命令将38.1G的文件按照指定大小切割,

    split -b 820000k -a 2 filename data_

    上述代码的意思是,指定每块大小为820000k,-a 2代表2位数命名,"data_'代表前缀是'data_'

    最终生成49个文件(字典序 aa ? bw),前48个文件每个204800行 最后一个文件 169600行

    通过python循环读取文件

    首先构建词汇表:

    voc = ['a','b','c','d','e','f','g','h','i','j','k','l',

    'm','n','o','p','q','r','s','t','u','v','w','x',

    'y','z']

    voc_short = ['a','b','c','d','e','f','g','h','i','j','k','l',

    'm','n','o','p','q','r','s','t','u','v']

    为了方便读取,将49个二进制文件转换成numpy专用二进制格式*.npy

    for i in voc:

    data_name = 'data_a'+str(i)

    f = open(data_name,'rb')

    data_raw = struct.unpack('f'*209920000,f.read(4*209920000))

    f.close()

    data = np.asarray(data_raw).reshape(-1,1025)

    np.save(data_name+'.npy',data) # 保存data_a*.npy文件

    for i in voc_short:

    data_name = 'data_b'+str(i)

    f = open(data_name,'rb')

    data_raw = struct.unpack('f'*209920000,f.read(4*209920000))

    f.close()

    data = np.asarray(data_raw).reshape(-1,1025)

    np.save(data_name+'.npy',data) # 保存data_b*.npy文件

    data_name = 'data_bw'

    f = open(data_name,'rb')

    data_raw = struct.unpack('f'*173840000,f.read(4*173840000))

    np.save(data_name+'.npy',data_raw) # 保存data_bw.npy文件

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • 在廖雪峰老师的教程里字符串和编码这一章有这样一段描述: 这是什么意思呢? 对整数来说,在%和d之间加上...再看廖老师的例子,仔细观察第一个例子的回写里,3和前引号之间有一个空格,这是因为3这个数2个位置

    在廖雪峰老师的教程里字符串和编码这一章有这样一段描述:


    这是什么意思呢?

    对整数来说,在%和d之间加上的数值表示需要格式化的这个整数占的位数,而再加入一个0就是说要在没有数的空位上补零。例如“%0Ad”%(5)就是说5这个数占了A那么多个位置,但是5只有一个数,所以在其他位置上补上0。

    再看廖老师的例子,仔细观察第一个例子的回写里,3和前引号之间有一个空格,这是因为3这个数占2个位置,而后面的1也占两个位置,因为声明了要补0,所以是01。

    再举一个例子


    比如在这个例子中,5表示后面这个数“8”要占5个位置,但是因为没有补零,所以回写的8前面空了4个格子。如果声明需要补零,则回写会补4个0在前面。


    第二个指定浮点数位数这个就很容易理解了,声明几就是保留几位小数。

    展开全文
  • 前几天看一个网友提问,如何计算'1+1'这种字符串的值,不能用eval函数. 我仿佛记得以前新手时,对这个...而'**'这种2个字符的运算符,还有着奇特的优先级规则,x**y**z应先计算y**z,并且如果z后面还跟着**的话,则不能...

    前几天看一个网友提问,如何计算'1+1'这种字符串的值,不能用eval函数.

    我仿佛记得以前新手时,对这个问题完全不知道如何下手.

    我觉得处理括号实在是太复杂了,多层嵌套括号怎么解析呢?一些多余的括号呢?

    而在没有括号的情况下,处理不同运算符之间的优先级又很头疼.

    而'**'这种占2个字符的运算符,还有着奇特的优先级规则,x**y**z应先计算y**z,并且如果z后面还跟着**的话,则不能先计算y**z..这是最难的地方!

     

    但是,今天我竟然把它实现了!而且是用最原始的函数实现的,它们是:

    str,s.isdigit,s.find,s.count,
    dict,float
    if,in,and,not
    ==,>=,+(字符串连接)

     

    float对象的6个方法不计算在内,这是无法避免的基础函数.

    而str,float,dict只是起到类型转换或初始化数据的作用.所以真正用到的函数更是少之又少.

    可能正是因为如此,我在程序设计上花了很多的心思.我用了非常多的if判断.显得有些难以看懂.而实际上每个分支都对应一种简单的情况.

    唯一难的地方在于幂的递归运算(get_rig_rest函数).

     

    这令我非常激动.这让我意识到自己解决复杂问题的能力!

    另外应该指出,我的思路来自于前段时间学习Scheme时重写一些基本函数所养成的递归思考的习惯.

    同时,Python真的是太方便和强大了,快速的print让测试+修改十分简单,极大提高了大脑解决抽象问题的能力(没有print,也许你要浪费很多笔,纸和时间).

    dic={'+':float.__add__,
         '-':float.__sub__,
         '*':float.__mul__,
         '/':float.__floordiv__,
         '%':float.__mod__,
         '**':float.__pow__,}
    
    priority=dict((('**',3),('*',2),('/',2),('%',2),('+',1),('-',1)))
    
    def prt(opf,p_opf):
        '幂运算符总是最优先,即使左边也是幂运算符'
        if p_opf=='**':
            return False
        return priority[opf]>=priority[p_opf]
    
    def get_val(lef,opf,rig):
        return str(dic[opf](float(lef),float(rig)))
    
    def isfloat(s):
        return s.isdigit() or s=='.'
    
    def get_brace(s,start=0):
        pos=s.find(')',start)+1
        brace=s[:pos]
        if brace.count('(')==brace.count(')'):
            return brace,s[pos:]
        return get_brace(s,pos)
    
    def get_rig_rest(s,num=''):
        '分裂为数字+剩余部分'
        '如果数字后是幂运算符,则需要计算该数字的幂,将结果作为数字部分返回'
        if s[:2] =='**':
            pow_num,rest=get_rig_rest(s[2:])
            return get_val(num,'**',pow_num),rest      
        if s=='' or s[0] in dic:
            return num,s
        if s[0]=='(':
            brace,rest=get_brace(s)
            return ieval(brace[1:-1]),rest
        if isfloat(s[0]):
            return get_rig_rest(s[1:],num+s[0])
    
    def ieval(s,lef='',opf=None,rig=''):
        if not opf and not s:
            return lef
        if not opf and isfloat(s[0]):
            return ieval(s[1:],lef+s[0],opf,rig)
        if not opf and s[0] in dic:
            if s[1]=='*':
                return ieval(s[2:],lef,'**',rig)
            return ieval(s[1:],lef,s[0],rig)
        if not opf and s[0]=='(':
            brace,rest=get_brace(s)
            if not rest:
                return ieval(brace[1:-1])
            return ieval(rest,lef+ieval(brace[1:-1]),
                        opf,rig)
        if opf and not s:
            return get_val(lef,opf,rig)
        if opf and s[0]=='(':
            brace,rest=get_brace(s)
            if not rest:
                return get_val(lef,opf,ieval(brace[1:-1]))
            return ieval(lef+opf+ieval(brace[1:-1])+rest,
                        '',None,'')
        if opf and isfloat(s[0]):
            return ieval(s[1:],lef,opf,rig+s[0])
        if opf and s[0] in dic:
            number=2 if s[1]=='*' else 1
            p_opf=s[:number]
            if prt(opf,p_opf):
                return ieval(s,get_val(lef,opf,rig),None,'')
            p_rig,p_rest=get_rig_rest(s[number:])            
            return ieval(lef+opf+get_val(rig,p_opf,p_rig)+p_rest,
                        '',None,'')
    
    test=['1+2+3', #常规
          '1+2*9', #简单运算符优先级
          '1+2*(3+4)', #简单运算符优先级+括号
          '4**3**2', #幂运算优先级
          '3+2*0.5**(2+2**2)',#多重优先级+括号
          '(1+2)*(2+3)', #并列括号
          '((9+3)/2)', #嵌套括号
          '((1234)-1)', #多余括号
          '((1+3**2)*((2%3+(3+3*2**3))*(4-1)*(1+2)+5*6)*4)'] #复杂情形
    
    for x in test:
        print(ieval(x),'---',eval(x))
        

     

    结果:

    >>> 
    6.0 --- 6
    19.0 --- 19
    15.0 --- 15
    262144.0 --- 262144
    3.03125 --- 3.03125
    15.0 --- 15
    6.0 --- 6.0
    1233.0 --- 1233
    11640.0 --- 11640

     

     

    转载于:https://www.cnblogs.com/xiangnan/p/3413522.html

    展开全文
  • PYTHON基础

    2020-12-11 10:39:45
    数据的基本类型 str=‘ ’其他数据类型–>字符串 转换成字符:使用str函数:也可以使用引号’’or’’’ float 0.0(浮点型) 转换成浮点数:文字类字符串无法转换成浮点数 ...%s就表示先一个字
  • 一、python格式化输出 使用占位符输出时,%s表示字符串输出,%d表示整数输出,%f表示浮点数输出 优点:填充方式灵活,单个参数可以多次输出,参数顺序可以不同 1、整型 %d 表示整型 >>>name = 'lly' ...
  • 第二章Python基础

    2021-01-07 12:40:00
    第二章Python基础 ...2.浮点型:每个浮点数占8个字节(64位),其中以51位表示其尾数 两种表示形式 ①小数形式 ②指数形式(科学计数法) <实数>E<±整数>或者<实数>e<±整数>
  • python疑问汇总

    2020-06-18 14:34:24
    学习python有一段时间,这里把所有的疑问都列出来,如果有答案则附上链接,无结果先个坑,以免忘记 1.继承父类时 super的作用? 2.什么是面向对象? 在解决一个问题时,它和面向过程有何不同 3.python中的变量的...
  • 最近学习了python数据结构,做一些必要的笔记,一来是对自己学习的知识的巩固,二来对有同样问题的人有...假设数组的首地址为50,每个浮点数占8个字节 那么在查找的时候: a[2] = 50 + 2 * 8 二 Python列表与C数组的不.
  • Python基础_2

    2019-06-14 21:50:00
    python中常用%s来表示字符串,其实它是一个占位符或者叫格式符,用来住一个位置并且指定该位置的变量格式是什么(比如字符串,整数,浮点数等等)后面再接变量名,这样在python代码运行的时候就会在占位符中按照其...
  • python 数据精度控制

    千次阅读 2018-09-11 22:15:13
    Python不支持32bit的单精度浮点数。更加精确的精度控制可以使用numpy扩展库 关于单精度和双精度的通俗解释: 单精度型和双精度型,其类型说明符为float 单精度说明符,double 双精度说明符。在Turbo C中单精度型...
  • Python学习笔记00

    2020-11-25 07:27:07
    一个\t4个字符位 原字符 不希望字符串中的转义字符起作用,在字符串之前加上 r 或者 R ,且字符串最后一个字符不能是 \ 。 多次赋值后,变量名会指向新的空间(因为maria不再使用了,因此maria成了内存垃圾...
  • Python小数点精度控制

    万次阅读 2018-01-06 16:47:26
    1. Python 3.X对于浮点数默认提供17位数字的精度。 2. 关于单精度和双精度: 单精度型float 双精度型double。在Turbo C中单精度型4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效...
  • python标准化输出

    2021-01-12 15:01:59
    要注意传入的内容依旧是python特有的类型 整数类型 细节 %o 八进制 %d 十进制 %x 十六进制 浮点数类型 细节 %f 保留小数点后六位,%0.3f保留小数点后三位 %e 保留小数点后面六位有效数字,...
  • python 杂项笔记

    2020-09-11 10:07:19
    1.sql数据类型 可以通过常查看帮助文档查阅支持的数据类型 可以使用数据类型的原则是:==够用就行,尽量使用...decimal表示浮点数 如decimal(5,2)表示共存5位数,小数两位 char小时固定长度的字符串,如char(3),填
  • python 学习笔记

    2020-10-26 22:37:26
    一个中文字符经过utf-8编码后3个字节,一个英文字符只占用1个字节。 为了避免乱码问题,在操作字符串时,应始终坚持使用UTF-8编码进行str和bytes转换。 2.格式化 方法1: 占位符 替换内容 %d 整数 %f 浮点数 %s ...
  • Python中的数据类型

    2017-04-15 11:28:32
    Python中的数据类型一、数字1、int(整型)长整数:不过是大一些的整数。。 跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长...类似于C语言中的double类型,8个字节(64位),其中52位表示底,11...
  • python第二天

    2018-02-05 13:22:00
    基本数据和结构 数字 1.整数 (int) ...用来处理带小数点的数字,类似c的double类型,8个字符 (64位),其中52表示底,11位表示指数,剩下一位是符号。 布尔值 真和假 1或0 True或...
  • Python——实验二

    2021-05-26 09:20:12
    一、求余数 【问题描述】 输入两个整数x, y,求x除以y的余数。 【输入形式】 两个整数x, y,每个一行。...3个浮点数,每个整数一行。 【输出形式】 整数结果。 【样例输入】 1.0 1.0 1 【样例输出】 3.0 x=
  • python中的常见变量类型有:数,字符串,列表,字典和集合这篇博客是将这些变量的基本函数操作做一个记录,方便使用时候进行查询: 1.数字: 数字有整数,浮点数和复数 整数:num.bit_longth() (返回整数所...
  • Python(10)- 格式化输出%

    千次阅读 2019-04-26 15:52:24
    格式化输出1. 格式化输出浮点数2. 格式化输出整数3. 格式化输出浮点数4....**方法:**创建一个字符串,在需要输出变量的地方用%号格,在整个字符串后加%变量名 1. 格式化输出浮点数 name=‘xiaoming...
  • 1、在Python中字符串a占用一块内存地址,字符串b也占用一块内存地址,当字符串a+b时,又会在内存空间中开辟一块新的地址用来存放a+b。 a 地址一 b 地址二 a+b 地址三 因此内存中就了三份空间,对内存消耗是很大...
  • %f在python中代表浮点数,一般有以下几种1.%f 原样输出,python3精度默认小数点后6位,(最后一位四舍五入)2.%10f 输出数字总位数为10位,小数点也一位。不够时左侧补空格。3.%09.f "09."表示只输出整数位,不够...
  • Python格式化输出 1. %格式化输出 输出字符串 >>>print("my name is %s"%("Jack")) my name is Jack 说明:%s表示在"my name is "中了个位置,具体的值是后面%括号内的信息,即“Jack” 输出整数 &...
  • python学习笔记Day2

    2016-01-23 08:34:00
    字符编码 编程规范(PEP8) 变量1.... 2....%2d两位%02d两位用0填充%f浮点数%.2f取两位小数%s字符串%x十六进制整数%%表示%#单行注解'''多行注解 >>>n = "abc" >>>p...
  • 目前用过最方便的: % ...Python 3.X对于浮点数默认提供17位数字的精度。 关于单精度和双精度: 单精度型float 双精度型double。在Turbo C中单精度型4个字节(32位)内存空间,其数值范围为3.4E-38~3...
  • 4 位小数的浮点数 print %s's score is %d" % 'Mike, 87) 无论你有多少个值需要代入字符串中进行格式化只需要在字符串中的合适位置用对应格式 的%表示然后在后面的括号中按顺序提供代入的值就可以了
  • python 中的 turtle库 函数总结

    千次阅读 2020-05-30 12:01:36
    之前学习了turtle,现在把我在turtle中用到的...为浮点数时,表示屏幕百分比 starx,stary 定义画布在屏幕的为之,默认为正中心。 第二种方法 t.screensize(width,height,backgroundcolor) width,height均为正整数

空空如也

空空如也

1 2 3
收藏数 42
精华内容 16
关键字:

python浮点数占

python 订阅