8

我有一个带有 mpf 元素的 numpy 数组 A,其十进制精度为 100。如果我决定将 A 的 numpy 点积与它本身一起使用,这个精度是否会被抛弃?

如果是这种情况,有没有办法将 numpy 数组转换为 mpmath 矩阵,这样我就可以保持精度?

4

1 回答 1

12

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 提供的更高精度得以保留。

于 2016-04-24T22:29:09.083 回答