Numba np.linalg.eigvalsh Exception поднят неконсистенлтиPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Numba np.linalg.eigvalsh Exception поднят неконсистенлти

Сообщение Anonymous »

Я использую numba , чтобы скомпилировать дорогостоящую калькуляцию для значительного повышения производительности - это замечательно! Недавно я сделал небольшое изменение в калькуляции, чтобы извлечь некоторые дополнительные значения (собственные значения), очистил кэш и начал тестировать. Все компилируется без ошибок и начинает работать.

Код: Выделить всё

SystemError:  returned a result with an exception set
< /code>
Я скомпилировал все свои функции с любым: < /p>
@njit(error_model="numpy", cache=True)
< /code>
или < /p>
@njit(error_model="numpy", cache=True, parallel=True)
< /code>
где применимо. Я использую Puthon 3.12.9 
, Numpy 2.1.3 и Numba 0.61.0 и любые другие Depdendencies, которые они притягивают.
Хотя Я установил отладчика, чтобы остановиться на поднятом исключении, это на самом деле не помогает (много), поскольку в данных или коде нет ничего плохого. Запуск всех данных через код, содержащийся в скомпилированной функции в консоли, не дает ошибок, и я даже могу вызвать скомпилированную функцию, которая подняла ошибку в отладчике и запускается. Это не является неконтевно воспроизводимой ошибкой. < /P>
Когда я вызываю скомпилированную функцию, которая вызвала ошибку, которая возникает одна из трех вещей: она возвращает правильный результат, он возвращает невидимый результат, когда все является муралым ( какое -то значение xxxxxe+303 - возможно, означающее, что Calc folidue Calc не сходился?) Или возвращает ошибку набора исключений. < /p>
происхождение Ошибка кажется довольно случайной, так как я многократно проверяю на одних и тех же данных: иногда она сталкивается с ошибкой после одного или двух вызовов фонда, в других случаях это может быть сотня вызовов к функции, прежде чем ошибка повторно поступит. В этом случае я могу извлечь следующую ошибку: < /p>

Код: Выделить всё

Traceback (most recent call last):
File "C:\Users\jpmor\anaconda3\envs\new_base\Lib\site-packages\numba\np\linalg.py", line 841, in _check_finite_matrix
raise np.linalg.LinAlgError(
numpy.linalg.LinAlgError: Array must not contain infs or NaNs.

The above exception was the direct cause of the following exception:
Я использую только np.linalg дважды в моем коде, который помогает сузить поле:

Код: Выделить всё

len = np.linalg.norm(vect[indx, :])
< /code>
и позже < /p>
eigenvalues = np.linalg.eigvalsh(stress.reshape(3, 3))
Поскольку _check_finite_matrix вызывается

Код: Выделить всё

@overload(np.linalg.eigvals)
def eigvals_impl(a):
....
< /code>
Это должно быть источником моей проблемы, но я не понимаю, почему на одних и тех же данных это иногда бросает ошибку, а в другое время она работает отлично. Из документов Numpy 
я вижу, что Linkgerror будет поднят, если вычисление собственного значения не сходится.
Я считаю Произойти с Numba , так как я никогда не получаю ошибку при запуске с более медленной, некомпилочной функцией в Pure Numpy .
i Угадайте, что возможное простое решение - не использовать Numba , но я бы хотел, чтобы мой код закончил работу в тот же день. Есть ли альтернатива np.linalg.eigvals , которая стабильна с numba ? Можно ли написать домашнюю функцию, которая будет работать и быть так же быстро?

Подробнее здесь: https://stackoverflow.com/questions/794 ... nsistenlty
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»