Преобразование собственных python типов в numpy dtypes - PullRequest
0 голосов
/ 04 мая 2020

Не путать с обратной задачей, которая покрыта много. Я ищу что-то вроде np.dtype(7.7) == np.float. Мотивация состоит в том, чтобы иметь возможность обрабатывать любой ввод, подобный массиву, как и сам numpy Чтобы создать выходные данные или временные данные, я иногда хочу использовать тип ввода, если это возможно.

Редактировать: Возможно, это был плохой (слишком конкретный c) пример; Я знаю, что np.float просто псевдоним встроенного float. Я думал больше по следующим направлениям.

myInput = something
# required to have a homogeneous data type in the documentation of my function;
# maybe constrained to float, int, string, lists of same length and type
# but I would like to handle simply as much of that as numpy can handle
numInput = len(myInput)
numOutput = numInput // 2 # just for example
myOutput = np.empty(shape=(numOutput), dtype=???)
for i in range(numOutput):
  myOutput[i] = whatever # maybe just a copy, hence the same data type

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

numpy.float - это обычный Python float тип. Это не NumPy dtype. Это почти наверняка не то, что вам нужно:

>>> import numpy
>>> numpy.float is float
True

Если вы хотите, чтобы dtype NumPy принудительно использовал ваш скаляр, просто создайте массив и получите его dtype:

>>> numpy.array(7.7).dtype
dtype('float64')

Если Вы хотите, чтобы тип NumPy использовал для скаляров этого dtype, доступ к атрибуту dtype type:

>>> numpy.array(7.7).dtype.type
<class 'numpy.float64'>
0 голосов
/ 04 мая 2020

Вы можете просто использовать np.float64 (original_float) или любой другой тип numpy, который вы наберете sh, чтобы преобразовать вашу переменную в.

Для записи этот код работает:

    val = 7.7
    if isinstance(val, float) is True:
        val = np.float64(val)
        if isinstance(val, np.float64) is True:
            print("Success!")

>>>Success!

Надеюсь, это поможет.

Редактировать: Я только что видел, что @ user2357112 поддерживает комментарий Моники на ваш вопрос, и важно отметить, что np.float эффективно работает так же, как плавать. Предоставленная мною реализация ориентирована на специальные типы numpy, такие как np.float32 или np.float64, которые я использовал в тестовом коде. Но если бы я выполнил тот же тест только с np.float, это было бы результатом:

    val = 7.7
    if isinstance(val, float) is True:
       if isinstance(val, np.float) is True:
          print("Success!")
>>>Success!

Таким образом, доказав, что с точки зрения интерпретатора float и np.float в значительной степени одного типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...