gpt4 book ai didi

python - 其错误值的有效数字位数

转载 作者:行者123 更新时间:2023-11-28 18:43:11 25 4
gpt4 key购买 nike

我需要一个函数,该函数仅返回与给定错误相关的值的重要部分。意思是这样的:

def (value, error):
""" This function takes a value and determines its significant
accuracy by its error.
It returns only the scientific important part of a value and drops the rest. """

magic magic magic....

return formated value as String.

到目前为止我所写的内容表明了我的意思:

import numpy as np

def signigicant(value, error):
""" Returns a number in a scintific format. Meaning a value has an error
and that error determines how many digits of the
value are signifcant. e.g. value = 12.345MHz,
error = 0.1MHz => 12.3MHz because the error is at the first digit.
(in reality drop the MHz its just to show why.)"""


xx = "%E"%error # I assume this is most ineffective.
xx = xx.split("E")
xx = int(xx[1])

if error <= value: # this should be the normal case
yy = np.around(value, -xx)

if xx >= 0: # Error is 1 or bigger
return "%i"%yy

else: # Error is smaller than 1
string = "%."+str(-xx) +"f"
return string%yy

if error > value: # This should not be usual but it can happen.
return "%g"%value

我不想要的是像 numpys around 或 round 这样的函数。这些函数接受一个值,并想知道这个值的哪一部分是重要的。关键是一般来说我不知道​​有多少数字是有效的。这取决于该值的误差大小。另一个例子:

值 = 123,错误 = 12,=> 120可以去掉 3,因为错误的大小是 10。但是这种行为并不那么重要,因为有些人仍然将值写为 123。这里可以,但不是完全正确。

对于大数字,“g”字符串运算符是一个可用的选择,但并不总是我需要的。例如如果错误大于该值。(例如,当有人想测量不存在的东西时发生。)

值 = 10,错误 = 100

我仍然希望保留 10 作为值,因为我对它更了解。该函数应该返回 10,而不是 0。

我写的东西或多或少确实有用,但它显然在任何方面都不是有效的或优雅的。我还认为这个问题确实涉及数百人,因为每个科学家都必须以这种方式格式化数字。所以我确定某处有现成的解决方案,但我还没有找到它。可能我的 google 技能不够好,但我在两天内找不到解决方案,现在我在这里问。

为了测试我的代码,我使用了以下内容,但还需要更多内容。

errors = [0.2,1.123,1.0, 123123.1233215,0.123123123768]
values = [12.3453,123123321.4321432, 0.000321 ,321321.986123612361236,0.00001233214 ]

for value, error in zip(values, errors):
print "Teste Value: ",value, "Error:", error
print "Result: ", signigicant(value, error)

最佳答案

import math

def round_on_error(value, error):
significant_digits = 10**math.floor(math.log(error, 10))
return value // significant_digits * significant_digits

示例:

>>> errors = [0.2,1.123,1.0, 123123.1233215,0.123123123768]
>>> values = [12.3453,123123321.4321432, 0.000321 ,321321.986123612361236,0.00001233214 ]
>>> map(round_on_error, values, errors)
[12.3, 123123321.0, 0.0, 300000.0, 0.0]

如果你想保留一个低于其误差的值

if (value <  error)
return value
else
def round_on_error(value, error):
significant_digits = 10**math.floor(math.log(error, 10))
return value // significant_digits * significant_digits

关于python - 其错误值的有效数字位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23524340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com