当前位置: 首页 > 面试题库 >

numpy任意精度线性代数

习哲彦
2023-03-14
问题内容

我有一个numpy的2d数组[中/大型-
例如500x500]。我想找到它的元素智能指数的特征值。问题在于某些值是非常负的(-800,-1000等),并且它们的指数下溢(意味着它们非常接近零,因此numpy将其视为零)。无论如何在numpy中使用任意精度?

我做梦的方式:

import numpy as np

np.set_precision('arbitrary') # <--- Missing part
a = np.array([[-800.21,-600.00],[-600.00,-1000.48]])
ex = np.exp(a)  ## Currently warns about underflow
eigvals, eigvecs = np.linalg.eig(ex)

我已经搜索了gmpy和mpmath的解决方案,但无济于事。任何想法都将受到欢迎。


问题答案:

SymPy可以计算任意精度:

from sympy import exp, N, S
from sympy.matrices import Matrix

data = [[S("-800.21"),S("-600.00")],[S("-600.00"),S("-1000.48")]]
m = Matrix(data)
ex = m.applyfunc(exp).applyfunc(lambda x:N(x, 100))
vecs = ex.eigenvects()
print vecs[0][0] # eigen value
print vecs[1][0] # eigen value
print vecs[0][2] # eigen vect
print vecs[1][2] # eigen vect

输出:

-2.650396553004310816338679447269582701529092549943247237903254759946483528035516341807463648841185335e-261
2.650396553004310816338679447269582701529092549943247237903254759946483528035516341807466621962539464e-261
[[-0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999994391176386872]
[                                                                                                      1]]
[[1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000560882361313]
[                                                                                                    1]]

您可以将N(x,100)中的100更改为其他精度,但是,当我尝试1000时,本征vect的计算失败。



 类似资料:
  • 主要内容:numpy.dot(),numpy.vdot(),numpy.inner(),numpy.matmul(),numpy.linalg.det(),numpy.linalg.solve(),numpy.linalg.inv()NumPy 提供了 numpy.linalg 模块,该模块中包含了一些常用的线性代数计算方法,下面对常用函数做简单介绍: NumPy线性代数函数 函数名称 描述说明 dot 两个数组的点积。 vdot 两个向量的点积。 inner 两个数组的内积。 matmul 两

  • 在线性代数的范畴里,矩阵运算有很多不一样的地方,例如內积、行列式、逆运算等等。 Numpy 提供了一系列可以用于线性代数运算的函数,具体如下: 函数 描述 dot 两个数组的点积,即元素对应相乘。 vdot 两个向量的点积 inner 两个数组的内积 matmul 两个数组的矩阵积 determinant 数组的行列式 solve 求解线性矩阵方程 inv 计算矩阵的乘法逆矩阵 1. 二元运算 1

  • 问题内容: 根据Python整数范围内的答案,Python)应该具有“任意精度整数” 。但是这个结果显然 不是 任意精度: 根据PEP 237 ,它是任意大的(不仅仅是C类型的大小)。和维基百科说,Python的是任意精度。 那么,为什么以上代码行的结果不正确? 问题答案: 实际上,在python3中,每当您对int进行除法运算时,都会得到float。有一个执行整数除法的运算符: 这确实给出了正确

  • 我正在用C实现一个任意精度的算术库,在实现gamma函数的时候我陷入了困境。 通过分别使用等价 和 ,我可以得到所有实数值 的范围内 的有理数 。 但是,我不知道如何计算。对于Lanczos近似(https://en.wikipedia.org/wiki/Lanczos_approximation),我需要预先计算的值p,这些值恰好计算非整数值的阶乘(?!),并且以我目前的知识无法动态计算……在实

  • 当 小数点后15位的数字被证明是错误的。(尽管很高兴给你的数字远远超过15位!) 在Python中,如何获得的十进制扩展中的第一个正确数字?

  • 问题内容: 我正在寻找一种以任意精度(例如点后50位数左右)计算平方根的方法。 在python中,可以使用Decimal轻松访问它: 看到强大的功能后,我浏览了文档,但没有发现任何类似的内容。 因此,我唯一的选择是编写某种数值计算方法,该方法将迭代地尝试计算答案吗? 问题答案: 这是我自己的平方根计算实现。在等待答案时,我决定尝试一下计算平方根的方法。它有很多方法,但最后我发现通过减法 pdf 链