我有一个带有 mpf 元素的 numpy 数组 A,其十进制精度为 100。如果我决定将 A 的 numpy 点积与它本身一起使用,这个精度是否会被抛弃?
如果是这种情况,有没有办法将 numpy 数组转换为 mpmath 矩阵,这样我就可以保持精度?
Numpy 数组可以保存对象,特别是mpf
对象及其方法,例如dot
可以使用这些对象的加法/乘法方法。例子:
import mpmath
import numpy
mpmath.mp.dps = 25 # higher precision for demonstration
a = [mpmath.sin(mpmath.pi*n/3) for n in range(99)]
b = numpy.array(a)
b.dot(b)
输出mpf('49.50000000000000000000000165')
为了比较,如果在转换为 numpy 时将数组元素强制转换为双精度浮点数,会发生这种情况:
c = numpy.array(a, dtype=float)
c.dot(c)
输出49.499999999999993
。因此,在第一个版本中调用 dot 方法时,mpmath 提供的更高精度得以保留。