Как MPF массив?
Я имею:
import numpy as np
from mpmath import *
mpf(np.array(range(0,600)))
Но это не позволит мне сделать это:
TypeError: cannot create mpf from array
Так что мне делать?
По сути, я собираюсь использовать этот массив и умножать поэлементно на невероятно большое или невероятно малое число в зависимости от обстоятельств (например, 1.35626567e1084
или же 6.2345252e-2732
) отсюда необходимость в mpf.
Более конкретно, я буду использовать функцию besseli и besselk, которые создают невероятно большие и невероятно маленькие значения.
Как мне получить массив mpf для хранения этих чисел?
2 ответа
Умножение массива на число 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
Итак, ваша настоящая проблема в том, как оценить функцию mpmath в массиве numpy. Для этого я бы использовал np.frompyfunc
(некоторое время назад это был единственный вариант).
besseli_vec = np.frompyfunc(mp.besseli, 2, 1)
besseli_vec(0, A)
Проверять, выписываться mpmath.arange
:
import numpy as np
import mpmath as mp
np.array(mp.arange(600))