Как преобразовать numpy .int32 в десятичный. Десятичный - PullRequest
2 голосов
/ 22 апреля 2020

Я использую библиотеку, которая использует некоторые аргументы десятичного типа при вызове функции. Но у меня есть переменная типа numpy .int32. Когда я передаю его в вызов функции, я получаю следующую ошибку:

TypeError: преобразование из numpy .float32 в десятичное не поддерживается

Что означает попытку библиотеки преобразовать мои переданные аргументы в десятичное. десятичное, но не удалось. Пожалуйста, дайте мне знать, как я могу преобразовать мои переменные перед передачей в библиотеку. Спасибо

1 Ответ

2 голосов
/ 22 апреля 2020

Десятичное число принимает собственные Python типы.

numpyType.item() возвращает соответствующий собственный тип.

Вот пример:

import decimal
import numpy as np

# other library function
# will raise exception if passed argument is not Decimal
def library(decimal_arg):
    if type(decimal_arg) is not decimal.Decimal:
        raise TypeError('Not a decimal.Decimal')
    return decimal_arg

# wrapper with try block
def try_library(arg):
    try:
        print(library(arg))
    except TypeError as e:
        print(e)

def main():
    # we have some numpy types
    a = np.float32(1.1)
    b = np.int32(2)
    c = np.uint64(3000)

    # passing the numpy type does not work
    try_library(a)

    # Decimal's constructor doesn't know conversion from numpy types
    try:
        try_library(decimal.Decimal(a))
    except TypeError as e:
        print(e)

    # calling a.item() will return native Python type
    # constructor of Decimal accepts a native type
    # so it will work
    try_library(decimal.Decimal(a.item()))
    try_library(decimal.Decimal(b.item()))
    try_library(decimal.Decimal(c.item()))

main()
# output:

# Not a decimal.Decimal
# Cannot convert 1.1 to Decimal
# 1.10000002384185791015625
# 2
# 3000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...