У меня возникла следующая проблема:
>>> import numpy as np
>>> import mpmath as mp
>>> v1 = [mp.mpf(1), mp.mpf(2)]
>>> v2 = [mp.mpf(3), mp.mpf(4)]
>>> np.dot(v1,v2)
mpf('11.0')
>>> M2 = [[mp.mpf(1), mp.mpf(2)], [mp.mpf(3), mp.mpf(4)]]
>>> np.linalg.det(M2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "~/anaconda/lib/python2.7/site-packages/numpy/linalg/linalg.py", line 1776, in det
r = _umath_linalg.det(a, signature=signature)
TypeError: No loop matching the specified signature and casting
was found for ufunc det
Мои вызовы метода linalg.det
numpy
отлично работают с записями, отличными от mpmath
, но я получаю указанную выше ошибку, когда даю ему mp.mpf
s. Старый вопрос Взаимодействие между Numpy и MpMath в Python указывает, что np.dot
будет работает нормально, если записи mp.mpf
s (подтверждено выше), поэтому мой вопрос в том, почему это не переносится на np.linalg.det
, и что я могу сделать, чтобы обойти это. Контекст таков, что я уже написал большой объем кода, используя только numpy
(без mpmath
), и только что понял, что мне потребуется гораздо более высокая числовая точность, поэтому в идеале существует решение, которое не требует преобразования всего кода numpy
.
Заранее спасибо за любые ответы.
dot
есть ветка, которая умеет работать с объектными массивами dtype, правда скорость значительно меньше, чем с числовыми dtypes.det
такой возможности нет. Он использует только скомпилированный числовой код. Математика с массивами объектов dtype выполняется наугад и всегда медленнее. - person hpaulj   schedule 17.05.2021mpmath
. Есть ли другая библиотека для более высокой числовой точности, которая лучше взаимодействует с методамиnumpy
? - person zjs   schedule 17.05.2021mpmath.det
? - person Warren Weckesser   schedule 17.05.2021mp.det
совместим сnp.array
, но теперь я вижу, что это должно работать. Вычисление инверсий все еще может быть проблемой (посколькуmpmath
рассматривает инверсию как атрибут или из**-1
), но я, вероятно, смогу обойти это. Спасибо вам обоим за то, что указали мне правильное направление! - person zjs   schedule 19.05.2021