gpt4 book ai didi

python - Decimal 类型 NumPy 的矩阵逆

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:01 25 4
gpt4 key购买 nike

我有几个像这样的矩阵:

[[Decimal('1') Decimal('1') Decimal('1') Decimal('1')][Decimal('56.44000000000000000') Decimal('57.32000000000000000') Decimal('57.04000000000000000') Decimal('56.48000000000000000')]

是的,那就是decimal.Decimal类型。

然后我想要它的逆:

from numpy.linalg.linalg import inv
invs = inv(mymatrix)
print(invs)

[[ -2.07973657e+15 -7.33173736e+13 -5.68628487e+13 6.80363276e+11
4.51521775e+12 6.50136911e+11 1.12144399e+10 -1.44488244e+10
-4.87281445e+10 5.24155356e+08] ...

如您所见,这些值已转换为浮点值。我明白了Decimal is not supported out of the box ,但我仍然想要一种方法来使用十进制类型来实现精度。

最佳答案

不幸的是,没有办法让numpy及其逆运算与decimal.Decimal或cdecimal.Decimal一起使用。它始终会转换为 float64,因为它无法使用 Decimal 执行该操作。 Numpy 对 Decimal 不了解,因为数组将其保存为 dtype 对象。

如果你想更改 numpy 数组的数据类型,你可以调用如下内容:

from cdecimal import Decimal
a=np.array([[Decimal('1'),Decimal('1')],[Decimal('1'),Decimal('2')]])
a
>>> array([[Decimal('1'), Decimal('1')],
[Decimal('1'), Decimal('2')]], dtype=object)
a=a.astype(np.float128)
a
>>> array([[ 1.0, 1.0],
[ 1.0, 2.0]], dtype=float128)

这将为您提供 C 编译器的 long double 精度,可能是扩展精度格式(80 位浮点)

关于python - Decimal 类型 NumPy 的矩阵逆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32685280/

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