小编Mar*_*son的帖子

python中的随机Decimal

我如何获得随机decimal.Decimal实例?似乎随机模块只返回浮点数,这是一个转换为小数的皮塔饼.

python random decimal

12
推荐指数
3
解决办法
2万
查看次数

int子类的非确定性行为

我有子类int添加一个额外的属性:

class Integer(int):
    def __new__(cls, value, base=10, indirect=False):
        try:
            obj = int.__new__(cls, value, base)
        except TypeError:
            obj = int.__new__(cls, value)
        return obj

    def __init__(self, value, base=10, indirect=False):
        self.indirect = indirect
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中使用此类,int(Integer(b'0')) 有时返回值48(= ord('0')!)或192,而不是正确的值0. str(Integer(b'0'))总是返回'0'.这似乎只发生在值0.首先解码b'0'为字符串,或传递int(b'0')Integer没有区别.问题在于将a转换Integer(0)intwith int().

此外,这是以随机方式发生的.后续运行将在应用程序(解析器)的不同点产生48或192.Python 3.2.2和3.2.3都表现相同(32位,Windows XP).

我似乎无法在一个简单的测试程序中重现这一点.以下产生无输出:

for i in range(100000):
    integer = int(Integer(b'0'))
    if integer > 0:
        print(integer)
Run Code Online (Sandbox Code Playgroud)

检查int(Integer()) > 0我的应用程序中的条件(当我知道参数Integerb'0')并有条件地打印int(Integer(b'0')) …

python int subclass built-in python-3.x

10
推荐指数
0
解决办法
338
查看次数

python/numpy中的浮点数学不能跨机器重现

比较几台不同机器上的浮点计算结果,它们始终产生不同的结果.这是一个重现行为的简化示例:

import numpy as np
from numpy.random import randn as rand

M = 1024
N = 2048
np.random.seed(0)

a = rand(M,N).astype(dtype=np.float32)
w = rand(N,M).astype(dtype=np.float32)

b = np.dot(a, w)
for i in range(10):
    b = b + np.dot(b, a)[:, :1024]
    np.divide(b, 100., out=b)

print b[0,:3]
Run Code Online (Sandbox Code Playgroud)

不同的机器会产生不同的结果

  • [-2.85753540e-05 -5.94204867e-05 -2.62337649e-04]
  • [-2.85751412e-05 -5.94208468e-05 -2.62336689e-04]
  • [-2.85754559e-05 -5.94202756e-05 -2.62337562e-04]

但我也可以得到相同的结果,例如在同一年份的两台MacBook上运行.这种情况发生在具有相同版本的Python和numpy的机器上,但不一定与相同的BLAS库链接(例如,加速Mac上的框架,Ubuntu上的OpenBLAS).但是,不同的数值库是否应该符合相同的IEEE浮点标准并给出完全相同的结果?

python floating-point numpy blas

10
推荐指数
1
解决办法
973
查看次数

Python:如何在字符串拆分中包含分隔符?

我想拆分一个带有多个分隔符的字符串,但是在结果列表中保留分隔符.我认为这是一个有用的事情来做一个解析任何类型的公式的初始步骤,我怀疑有一个很好的Python解决方案.

有人问类似的问题在Java中这里.

例如,典型的拆分看起来像这样:

>>> s='(twoplusthree)plusfour'
>>> s.split(f, 'plus')
['(two', 'three)', 'four']
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一种很好的方法来添加加回(或保留它):

['(two', 'plus', 'three)', 'plus', 'four']
Run Code Online (Sandbox Code Playgroud)

最后,我想为每个操作员和支架做这个,所以如果有办法可以获得

['(', 'two', 'plus', 'three', ')', 'plus', 'four']
Run Code Online (Sandbox Code Playgroud)

一气呵成,然后更好.

python string parsing split

9
推荐指数
1
解决办法
1万
查看次数

gcc的__float128浮点数是否考虑了当前的舍入模式?

对gcc __float128浮点数的算术运算是否考虑了当前的舍入模式?

例如,如果使用C++ 11函数std::fesetenv,我将舍入模式更改为FE_DOWNWARD,将算术运算的结果__float128向下舍入?

这是否符合__float128规范?

c++ floating-point gcc c++11

9
推荐指数
1
解决办法
299
查看次数

Flask Babel - 'translations/de/LC_MESSAGES/messages.po'标记为模糊,跳过

我无法在Flask Babel中获得基本的翻译工作.

这是我的步骤.

  1. 我在一个页面中有这个 {{_("Hello")}}

  2. 我运行这个命令.

    pybabel extract -F babel.cfg -o messages.pot .
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后我为德语运行此命令.

    pybabel init -i messages.pot -d translations -l de
    
    Run Code Online (Sandbox Code Playgroud)
  4. 这是德语的mo文件 /app/translations/de/LC_MESSAGES/messages.po

    # German translations for PROJECT.
    # Copyright (C) 2012 ORGANIZATION
    # This file is distributed under the same license as the PROJECT project.
    # FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
    #
    #, fuzzy
    msgid ""
    msgstr ""
    "Project-Id-Version: PROJECT VERSION\n"
    "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
    "POT-Creation-Date: 2012-09-24 03:36+0800\n"
    "PO-Revision-Date: 2012-09-24 03:37+0800\n"
    "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
    "Language-Team: de <LL@li.org>\n"
    "Plural-Forms: nplurals=2; plural=(n …
    Run Code Online (Sandbox Code Playgroud)

python babel flask

8
推荐指数
2
解决办法
4836
查看次数

Qt程序挂起(无响应)直到功能结束然后再次开始工作

我在Qt中有一个UI应用程序,我有几个运行大规模SQL查询的函数,返回数千个结果.

当单击运行此查询的按钮时,UI窗口立即进入"无响应"但是我可以从控制台输出中看到所有内容实际上仍在后台运行.一旦函数结束,数据就会按预期呈现,并且UI再次响应并且功能完全正常.

我知道这是因为由于大量的结果,函数循环了数千次,但我希望我可以放入一个加载条,随着搜索的进行,而不是仅仅锁定窗口让它看起来像程序已经崩溃.AFAIK我没有内存泄漏所以有人有任何建议吗?

哦,我也认为它不是内存泄漏,因为当我点击该按钮任务管理器显示只有几MB的内存用于此过程和处理器绝不是最大化

c++ qt

8
推荐指数
2
解决办法
6975
查看次数

在Python中更快地卷积概率密度函数

假设需要计算一般数量的离散概率密度函数的卷积.对于下面的示例,有四个分布采用具有指定概率的值0,1,2:

import numpy as np
pdfs = np.array([[0.6,0.3,0.1],[0.5,0.4,0.1],[0.3,0.7,0.0],[1.0,0.0,0.0]])
Run Code Online (Sandbox Code Playgroud)

卷积可以这样找到:

pdf = pdfs[0]        
for i in range(1,pdfs.shape[0]):
    pdf = np.convolve(pdfs[i], pdf)
Run Code Online (Sandbox Code Playgroud)

然后给出看到0,1,...,8的概率

array([ 0.09 ,  0.327,  0.342,  0.182,  0.052,  0.007,  0.   ,  0.   ,  0.   ])
Run Code Online (Sandbox Code Playgroud)

这部分是我的代码的瓶颈,似乎必须有一些东西可用于矢量化这个操作.有没有人建议让它更快?

或者,您可以使用的解决方案

pdf1 = np.array([[0.6,0.3,0.1],[0.5,0.4,0.1]])
pdf2 = np.array([[0.3,0.7,0.0],[1.0,0.0,0.0]])
convolve(pd1,pd2) 
Run Code Online (Sandbox Code Playgroud)

得到成对的卷积

 array([[ 0.18,  0.51,  0.24,  0.07,  0.  ], 
        [ 0.5,  0.4,  0.1,  0. ,  0. ]])
Run Code Online (Sandbox Code Playgroud)

也会有很大的帮助.

python numpy vectorization convolution probability-density

8
推荐指数
1
解决办法
3401
查看次数

解释区间 [0, 1] 中明显联系的舍入方向上的惊人奇偶性

考虑和0.xx5之间形式的浮点数集合:0.01.0[0.005, 0.015, 0.025, 0.035, ..., 0.985, 0.995]

我可以在 Python 中轻松列出所有 100 个这样的数字:

>>> values = [n/1000 for n in range(5, 1000, 10)]
Run Code Online (Sandbox Code Playgroud)

让我们看看前几个和最后几个值来检查我们没有犯任何错误:

>>> values[:8]
[0.005, 0.015, 0.025, 0.035, 0.045, 0.055, 0.065, 0.075]
>>> values[-8:]
[0.925, 0.935, 0.945, 0.955, 0.965, 0.975, 0.985, 0.995]
Run Code Online (Sandbox Code Playgroud)

现在我想将这些数字中的每一个四舍五入到点后两位小数。一些数字将被四舍五入;有些会被四舍五入。我有兴趣准确计算有多少舍入。我也可以在 Python 中轻松计算:

>>> sum(round(value, 2) > value for value in values)
50
Run Code Online (Sandbox Code Playgroud)

所以事实证明,这 100 个数字中正好有一半被四舍五入了。

如果你不知道 Python 在底层使用二进制浮点,这个结果就不足为奇了。毕竟,Python 的文档明确指出该round函数使用舍入到偶数(又名银行家舍入)作为其舍入模式,因此您希望这些值交替向上舍入和向下舍入。

但是Python引擎盖下使用二进制浮点,这意味着有例外的少数(即0.1250.3750.625 …

python floating-point rounding ieee-754

8
推荐指数
1
解决办法
272
查看次数

单个精度浮点上的第24个小数位在哪里?IEEE 754

我发现自己今天做了一些操作,我决定稍微刷新我的浮点知识!

事情发展得伟大,直到我看到了这一点:

...有效数的23个小数位出现在存储器格式中,但总精度为24位

我一次又一次地读它,但我仍然无法弄清楚第24位的位置,我注意到了一些关于a的东西,binary point所以我认为它是在mantissa和它之间的中间点exponent.

我不太确定,但我相信他的作者正在谈论这一点:

         Binary point?
             |
s------e-----|-------------m----------
0 - 01111100 - 01000000000000000000000
           ^ this
Run Code Online (Sandbox Code Playgroud)

c c++ ieee-754

7
推荐指数
2
解决办法
803
查看次数