微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python:对具有高精度浮点数的矩阵求逆

如何解决Python:对具有高精度浮点数的矩阵求逆

我正在关注有关如何在Python中进行多精度算术的教程。
最后,我想创建一个numpy数组,该数组具有任意高精度的浮点数,并且需要对该矩阵求逆。

因此我们有:

import sys
import numpy as np
import gmpy2

print(sys.version)
print(np.__version__)
print(gmpy2.version)
3.6.10 | packaged by conda-forge | (default,Apr 24 2020,16:27:41) 
[GCC Clang 9.0.1 ]
1.12.1
<built-in function version>

接着是数据生成

A = np.ones((3,3));
B = A/gmpy2.mpfr("1.0")
print(A)
print(B)
[[ 1.  1.  1.]
 [ 1.  1.  1.]
 [ 1.  1.  1.]]
[[mpfr('1.0') mpfr('1.0') mpfr('1.0')]
 [mpfr('1.0') mpfr('1.0') mpfr('1.0')]
 [mpfr('1.0') mpfr('1.0') mpfr('1.0')]]

还有问题的部分:

print(np.linalg.pinv(B))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-23-3a70ff54e53d> in <module>
----> 1 print(np.linalg.pinv(B))

~/conda-envs/Python_Jupyter/env/lib/python3.6/site-packages/numpy/linalg/linalg.py in pinv(a,rcond)
   1660     _assertNoEmpty2d(a)
   1661     a = a.conjugate()
-> 1662     u,s,vt = svd(a,0)
   1663     m = u.shape[0]
   1664     n = vt.shape[1]

~/conda-envs/Python_Jupyter/env/lib/python3.6/site-packages/numpy/linalg/linalg.py in svd(a,full_matrices,compute_uv)
   1402 
   1403         signature = 'D->DdD' if isComplexType(t) else 'd->ddd'
-> 1404         u,vt = gufunc(a,signature=signature,extobj=extobj)
   1405         u = u.astype(result_t,copy=False)
   1406         s = s.astype(_realType(result_t),copy=False)

TypeError: No loop matching the specified signature and casting
was found for ufunc svd_n_s

有人会知道如何实现我正在努力的目标吗?

解决方法

我已经设法用mpmath来对具有非常精确的数字的矩阵求逆,该矩阵包含许多内置的数学函数以及矩阵类。感谢您的评论!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。