11

我有:

import numpy as np
from mpmath import *

mpf(np.array(range(0,600)))

但它不会让我这样做:

TypeError: cannot create mpf from array

那我该怎么办?

本质上,我将使用这个数组,并根据情况(例如1.35626567e10846.2345252e-2732)将元素乘以令人难以置信的大或令人难以置信的小数,因此需要 mpf。

更具体地说,我将使用 besseli 和 besselk 函数来创建令人难以置信的大值和小值。

如何获得一个 mpf 数组来保存这些数字?

4

2 回答 2

16

将数组乘以 mpf 数字即可:

import numpy as np
import mpmath as mp
small_number = mp.besseli(400, 2)  # This is an mpf number
# Note that creating a list using `range` and then converting it
# to an array is not very efficient. Do this instead:
A = np.arange(600)
result = small_number * A  # Array of dtype object, ie, it contains mpf numbeers

将包含 mpf 数字的两个数组元素相乘也可以:

result * result

所以你真正的问题是如何评估一个 numpy 数组中的 mpmath 函数。为此,我会使用np.frompyfunc(前一段时间这是唯一的选择)。

besseli_vec = np.frompyfunc(mp.besseli, 2, 1)
besseli_vec(0, A)
于 2012-12-06T17:06:54.623 回答
3

签出mpmath.arange

import numpy as np
import mpmath as mp

np.array(mp.arange(600))
于 2012-12-06T13:28:55.783 回答