我如何获得随机decimal.Decimal实例?似乎随机模块只返回浮点数,这是一个转换为小数的皮塔饼.
我有子类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我的应用程序中的条件(当我知道参数Integer是b'0')并有条件地打印int(Integer(b'0')) …
比较几台不同机器上的浮点计算结果,它们始终产生不同的结果.这是一个重现行为的简化示例:
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)
不同的机器会产生不同的结果
但我也可以得到相同的结果,例如在同一年份的两台MacBook上运行.这种情况发生在具有相同版本的Python和numpy的机器上,但不一定与相同的BLAS库链接(例如,加速Mac上的框架,Ubuntu上的OpenBLAS).但是,不同的数值库是否应该符合相同的IEEE浮点标准并给出完全相同的结果?
我想拆分一个带有多个分隔符的字符串,但是在结果列表中保留分隔符.我认为这是一个有用的事情来做一个解析任何类型的公式的初始步骤,我怀疑有一个很好的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)
一气呵成,然后更好.
对gcc __float128浮点数的算术运算是否考虑了当前的舍入模式?
例如,如果使用C++ 11函数std::fesetenv,我将舍入模式更改为FE_DOWNWARD,将算术运算的结果__float128向下舍入?
这是否符合__float128规范?
我无法在Flask Babel中获得基本的翻译工作.
这是我的步骤.
我在一个页面中有这个 {{_("Hello")}}
我运行这个命令.
pybabel extract -F babel.cfg -o messages.pot .
Run Code Online (Sandbox Code Playgroud)然后我为德语运行此命令.
pybabel init -i messages.pot -d translations -l de
Run Code Online (Sandbox Code Playgroud)这是德语的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)我在Qt中有一个UI应用程序,我有几个运行大规模SQL查询的函数,返回数千个结果.
当单击运行此查询的按钮时,UI窗口立即进入"无响应"但是我可以从控制台输出中看到所有内容实际上仍在后台运行.一旦函数结束,数据就会按预期呈现,并且UI再次响应并且功能完全正常.
我知道这是因为由于大量的结果,函数循环了数千次,但我希望我可以放入一个加载条,随着搜索的进行,而不是仅仅锁定窗口让它看起来像程序已经崩溃.AFAIK我没有内存泄漏所以有人有任何建议吗?
哦,我也认为它不是内存泄漏,因为当我点击该按钮任务管理器显示只有几MB的内存用于此过程和处理器绝不是最大化
假设需要计算一般数量的离散概率密度函数的卷积.对于下面的示例,有四个分布采用具有指定概率的值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)
也会有很大的帮助.
考虑和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.125,0.375,0.625 …
我发现自己今天做了一些操作,我决定稍微刷新我的浮点知识!
事情发展得伟大,直到我看到了这一点:
...有效数的23个小数位出现在存储器格式中,但总精度为24位
我一次又一次地读它,但我仍然无法弄清楚第24位的位置,我注意到了一些关于a的东西,binary point所以我认为它是在mantissa和它之间的中间点exponent.
我不太确定,但我相信他的作者正在谈论这一点:
Binary point?
|
s------e-----|-------------m----------
0 - 01111100 - 01000000000000000000000
^ this
Run Code Online (Sandbox Code Playgroud)