相关疑难解决方法(0)

比较两个浮点数在Python中是否相等

当比较两个是否在Python中浮动时,我看到代码总是这样比较一个小值epsilon,想知道选择正确的epsilon值的最佳实践是什么?它背后的场景是什么?谢谢.

epsilon = 0.000001
abs(a - b)<epsilon
Run Code Online (Sandbox Code Playgroud)

python floating-point

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

如何比较catch2中的浮点数

我正在使用 Catch v2.13.1

比较浮点值的正确方法是什么?我以为下面的会失败,但都通过了。

REQUIRE(1147332687.7189338 == Approx(1147332688.4281545).margin(0.0001));
REQUIRE(1147332687.7189338 == Approx(1147332688.4281545));
Run Code Online (Sandbox Code Playgroud)

然而这按预期失败了

REQUIRE(abs(1147332687.7189338 - 1147332688.4281545) <= Approx(0).margin(0.0001));
Run Code Online (Sandbox Code Playgroud)

我不明白为什么前两个语句不起作用

c++ catch-unit-test catch2

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

Pandas 使用 apply lambda 和两个不同的运算符

这个问题与我之前发布的问题非常相似,只有一处更改。我不仅想计算所有列的绝对差异,还想找到“Z”列的幅度差异,因此如果当前 Z 比前一个大 1.1 倍,则保留它。

(问题的更多背景)

Pandas 使用先前的排名值来过滤当前行

df = pd.DataFrame({
    'rank': [1, 1, 2, 2, 3, 3],
    'x': [0, 3, 0, 3, 4, 2],
    'y': [0, 4, 0, 4, 5, 5],
    'z': [1, 3, 1.2, 3.25, 3, 6],
})
print(df)
#    rank  x  y     z
# 0     1  0  0  1.00
# 1     1  3  4  3.00
# 2     2  0  0  1.20
# 3     2  3  4  3.25
# 4     3  4  5  3.00
# 5     3  2 …
Run Code Online (Sandbox Code Playgroud)

python lambda pandas

6
推荐指数
2
解决办法
593
查看次数

简单求和的 Python 舍入误差

>>> sum([0.3, 0.1, 0.2])
0.6000000000000001

>>> sum([0.3, 0.1, 0.2]) == 0.6
False
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能使结果恰好为 0.6?我不想将结果四舍五入到一定数量的十进制数字,因为那样我可能会失去其他列表实例的精度。

python precision rounding

4
推荐指数
1
解决办法
3495
查看次数

python中浮点数是如何存储的

过去几天我一直在使用 python 来做作业。我注意到一件奇怪的事情——

  1. 当我将字符串转换为浮点数时 - 它给出的位数与字符串中的位数完全相同。
  2. 当我使用带有 4 个字节浮点数的 struct.pack() 将此数字放入文件中并使用 struct.unpack() 读回它时,它给出的数字不完全相同,但给出了一些更长的字符串,如果按照浮点存储,我期望该数字

    前任。- 字符串 - 0.931973

    浮点数 - 0.931973

    来自文件 - 0.931972980499(在结构打包并解包为 4 个字节之后)

所以当我从字符串读取它时,我无法理解Python实际上是如何存储我的号码的。

编辑 编写浮点数(我认为在ubuntu上的python 2.7中它是另一种方式,d-double和f-float)

buf = struct.pack("f", float(self.dataArray[i]))
fout.write(buf)
Run Code Online (Sandbox Code Playgroud)

询问 -

buf = struct.pack("f", dataPoint)
dataPoint = struct.unpack("f", buf)[0] 
node = root
while(node.isBPlusNodeLeaf()) == False:
    node = node.findNextNode(dataPoint)
Run Code Online (Sandbox Code Playgroud)

查找下一个节点 -

def findNextNode(self, num):
    i = 0
    for d in self.dataArray:
        if float(num) > float(d):
            i = i + 1
            continue
        else:                
            break
    ptr = self.pointerArray[i] …
Run Code Online (Sandbox Code Playgroud)

python floating-point

4
推荐指数
1
解决办法
3975
查看次数

Python2 math.fsum不准确吗?

我正在使用python2数学模块来计算fsum的总和.据我所知,0.1通常不能存储二进制.据我所知math.fsum应该以某种方式解决这个问题.

import math
math.fsum([0.0, 0.1])
#0.1
math.fsum([0.1, 0.1])
#0.2
math.fsum([0.2, 0.1])
#0.30000000000000004
math.fsum([0.3, 0.1])
#0.4
math.fsum([0.4, 0.1])
#0.5
Run Code Online (Sandbox Code Playgroud)

所以math.fsum([0.2,0.1])== 0.3将为False.这应该是这样的吗?难道我做错了什么?

我怎样才能得到0.2 + 0.1 == 0.3为真?

python math sum

4
推荐指数
1
解决办法
507
查看次数

Python Pandas Lambda:在 DataFrame 中使用多个变量 Lambda

我有一个系列,如下所示:

example = pd.Series([[1.0, 1209.75, 1207.25],
 [1.0, 1211.0, 1207.5],
 [-1.0, 1211.25, 1205.75],
 [0, 1207.25, 1206.0],
 [1.0, 1206.25, 1201.0],
 [-1.0, 1205.75, 1202.75],
 [0, 1205.5, 1203.75]])
Run Code Online (Sandbox Code Playgroud)

这个系列基本上在每个单元格中有一个包含 3 个数字的列表。我把它变成一个 DataFrame 并添加一个新列:

example = example.to_frame(name="input")
example["result"]=np.NaN
Run Code Online (Sandbox Code Playgroud)

现在我想对其执行以下操作:

example["result"] = example["input"].apply(lambda x,y,z: y if x==1 else z if x==-1 else NaN)
Run Code Online (Sandbox Code Playgroud)

尝试执行此操作时收到以下错误消息: missing 2 required positional arguments: 'y' and 'z'

python lambda pandas

4
推荐指数
1
解决办法
3588
查看次数

如果 Python 中的条件未提供正确的结果

这对我来说是一个有点奇怪的问题,我不确定如何正确地命名这个问题。我有以下 MWE,它只是生成坐标点列表(x,t)并执行一些检查以查看它们是否位于用户指定的边界上。特别是, ifx[i] == 1.0t[i] != 0.0then 程序应该打印一条声明来说明这一点。我似乎无法弄清楚为什么if这里从未输入条件。我已经打印出值对x[i]t[i]验证是否确实存在满足条件的值对......

#Load Modules
import numpy as np
import math, random
from pylab import meshgrid

# Create the arrays x and t on an evenly spaced cartesian grid
N = 10
xa = -1.0;
xb = 1.0;

ta = 0.0;
tb = 0.4;

xin = np.arange(xa, xb+0.00001, (xb-xa)/N).reshape((N+1,1))
tin = np.arange(ta, tb+0.00001, (tb-ta)/N).reshape((N+1,1))

X_tmp,T_tmp = meshgrid(xin,tin)
x = np.reshape(X_tmp,((N+1)**2,1))
t = np.reshape(T_tmp,((N+1)**2,1)) …
Run Code Online (Sandbox Code Playgroud)

python if-statement numpy matplotlib

4
推荐指数
1
解决办法
62
查看次数

python浮点数的精度(小数点)是多少?

我试图确定与零相比时python浮点数的精确程度.请注意以下事项:

1e-323 == 0
> False
1e-324 == 0
> True
Run Code Online (Sandbox Code Playgroud)

我出现的阈值是324小数点,至少与我正在运行的实现(python 2.7,CPython).这记录在哪里?它是依赖于实现的吗?

python floating-point

3
推荐指数
1
解决办法
72
查看次数

Panda Dataframe 浮点比较问题

我有一个看起来像这样的数据集,其中第三列是通过将第一列除以第二列得出的:

    A_CLOSE_PRICE   B_CLOSE_PRICE   A_CLOSE_PRICE/B_CLOSE_PRICE
0          113.55            0.00                           inf
1           97.85           80.00                      1.223125
2           60.00           70.00                      0.857143
3           51.65           51.65                      1.000000
4           53.50             NaN                           NaN
5             NaN         1649.60                           NaN
6           40.00           40.50                      0.987654
7            1.10            1.00                      1.100000
Run Code Online (Sandbox Code Playgroud)

由于我想显示包含超过 10% 差异的行,我运行以下命令:

(df['A_CLOSE_PRICE/B_CLOSE_PRICE'] - 1 ).abs() > 0.1
Run Code Online (Sandbox Code Playgroud)

但是如下所示的最后一行返回“True”而不是“False”,这在我看来就像一个浮点问题。有谁知道应该如何正确处理此问题,以便我可以获得正确的结果?

0     True
1     True
2     True
3    False
4    False
5    False
6    False
7     True
Run Code Online (Sandbox Code Playgroud)

python pandas

3
推荐指数
1
解决办法
42
查看次数