gpt4 book ai didi

python - NumPy 在浮点运算中将较低的精度转换为较高的精度

转载 作者:行者123 更新时间:2023-11-28 21:41:01 28 4
gpt4 key购买 nike

毫无疑问,其他(也许是所有)语言都是这种情况,但我只在 Python 中进行了测试。我的问题是:为什么 NumPy 对两个精度不同的值进行算术运算时,返回的结果是精度最高的值的 dtype?

例如

import numpy as np

single = np.array([[1, 2, 3], [4, 5, 6]], np.float32)
double = np.array([[1, 2, 3], [4, 5, 6]], np.float64)

diff = single-double

print "single data type -", single.dtype
print "double data type -", double.dtype
print "diff data type -", diff.dtype

产量:

single data type - float32
double data type - float64
diff data type - float64

据我了解浮点精度,diff 表示的额外后半部分不准确。在那种情况下,将结果转换为最高精度而不是最低精度的原因是什么?

最佳答案

这称为类型强制转换,至少在 NumPy 中,它总是会强制转换为具有更高精度的类型,因为这样您就不会意外失去精度,也不会发生溢出。

例如(关于“溢出”)强制转换为 float64 它(有点)有效:

>>> np.float64(1e40) - np.float32(1)
1e40

但如果它强制转换为 float32,您将得到:

>>> np.float64(1e40).astype(np.float32) - np.float32(1)
inf

那是因为最大的 float323.4028235e+38

>>> np.finfo(np.float32)
finfo(resolution=1e-06, min=-3.4028235e+38, max=3.4028235e+38, dtype=float32)

关于python - NumPy 在浮点运算中将较低的精度转换为较高的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45153489/

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