u010562991 2022-09-30 10:44 采纳率: 100%
浏览 30
已结题

python中Decimal矩阵运算怎么处理

问题遇到的现象和发生背景

我使用decimal运算,保留50位小数,存储到一个二位数组,然后将二位数组传入得np.linalg.inv()函数中进行矩阵求逆,出现了
No loop matching the specified signature and casting was found for ufunc inv错误,有什么好得解决方式

运行结果及报错内容

这是生成得数组:
[[Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')], [Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')], [Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')], [Decimal('0'), Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')], [Decimal('0'), Decimal('0'), Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')], [Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')], [Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')], [Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')], [Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')], [Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')], [Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')], [Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')], [Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')], [Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')], [Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')], [Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0'), Decimal('0'), Decimal('0')], [Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0'), Decimal('0')], [Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('0')], [Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17'), Decimal('1.5533333333333336782426196502153272777422355893436E-13')], [Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0'), Decimal('1.5533333333333336782426196502153272777422355893436E-13'), Decimal('-4.8862271584128455294289331030555893791746173867389E-17')]]
错误信息:

Traceback (most recent call last):

  File "D:\project\pacong\chen.py", line 225, in <module>
    mainExe()

  File "D:\project\pacong\chen.py", line 123, in mainExe
    AccZZ = inv(AccZF)

  File "<__array_function__ internals>", line 5, in inv

  File "D:\tools1\Anaconda3\lib\site-packages\numpy\linalg\linalg.py", line 545, in inv
    ainv = _umath_linalg.inv(a, signature=signature, extobj=extobj)

TypeError: No loop matching the specified signature and casting was found for ufunc inv
我的解答思路和尝试过的方法

我试过将值转换成string,尝试其他类型,但是其他类型无法存储50位小数

  • 写回答

2条回答 默认 最新

  • 天元浪子 Python领域优质创作者 2022-09-30 11:23
    关注

    np.linalg.inv函数接受浮点型和整形参数,将decimal.Decimal类型的列表当作参数,肯定出错。如果先将decimal.Decimal类型的列表转为np.float64类型,就不错报错了,不过np.float64只有52位尾数,最高精度大约是小数点后17位(1/pow(2, 52)),肯定无法满足题主要求。

    from decimal import *
    import numpy as np
    a = np.array([Decimal('0.1'), Decimal('0.2')], dtype=np.float64) # 需要指定类型
    a.dtype
    dtype('float64')
    a = np.array([Decimal('0.1'), Decimal('0.2')]) # 否则,就是object类型。这就是题主出错的原因
    a.dtype
    dtype('O')
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月8日
  • 已采纳回答 9月30日
  • 创建了问题 9月30日

悬赏问题

  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊