我有几个这样的矩阵:
[[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] ...如您所见,这些值被转换为浮动值。我理解十进制不支持开箱即用。,但我仍然想要用十进制类型来实现这一点,以提高精度。
发布于 2015-09-20 23:45:38
不幸的是,没有办法使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编译器的长双,可能是扩展的精确格式(80位浮点数)的精度。
https://stackoverflow.com/questions/32685280
复制相似问题