Как 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))
Другие вопросы по тегам