Как определить типы numpy в python?
Как можно достоверно определить, имеет ли объект тип numpy?
Я понимаю, что этот вопрос противоречит философии duck typing, но идея состоит в том, чтобы убедиться, что функция (которая использует scipy и numpy) никогда не возвращает тип numpy, если он не вызывается с типом numpy. Это приходит в решении другого вопроса, но я думаю, что общая проблема определения того, имеет ли объект тип numpy, достаточно далека от этого первоначального вопроса, что они должны быть разделены.
5 ответов:
используйте встроенный
type
функция, чтобы получить тип, то вы можете использовать__module__
свойство, чтобы узнать, где он был определен:>>> import numpy as np a = np.array([1, 2, 3]) >>> type(a) <type 'numpy.ndarray'> >>> type(a).__module__ 'numpy' >>> type(a).__module__ == np.__name__ True
решение, которое я придумал:
, это не 100% ясно что все типы numpy гарантированно будут либоisinstance(y, (np.ndarray, np.generic) )
np.ndarray
илиnp.generic
, и это, вероятно, не является надежной версией.
старый вопрос, но я придумал окончательный ответ с примером. Не помешает держать вопросы свежими, так как у меня была такая же проблема и я не нашел четкого ответа. Ключ, чтобы убедиться, что у вас есть
numpy
импортировано, а затем запуститеisinstance
боол. Хотя это может показаться простым, если вы выполняете некоторые вычисления в разных типах данных, эта небольшая проверка может служить быстрым тестом перед началом некоторой векторизованной операции numpy.################## # important part! ################## import numpy as np #################### # toy array for demo #################### arr = np.asarray(range(1,100,2)) ######################## # The instance check ######################## isinstance(arr,np.ndarray)
что на самом деле зависит от того, что вы ищете.
- если вы хотите проверить, является ли последовательность на самом деле
ndarray
, aisinstance(..., np.ndarray)
вероятно, самый простой. Убедитесь, что вы не перезагружаете numpy в фоновом режиме, поскольку модуль может отличаться, но в противном случае вы должны быть в порядке.MaskedArrays
,matrix
,recarray
все подклассыndarray
, Так что вы должны быть установлены.- если вы хотите проверить, является ли скаляр скаляром numpy, все становится немного сложнее. Вы можете проверить, имеет ли он
shape
и . Вы можете сравнить егоdtype
основной dtypes, список которых вы можете найти вnp.core.numerictypes.genericTypeRank
. Обратите внимание, что элементы этого списка являются строками, поэтому вам нужно будет сделатьtested.dtype is np.dtype(an_element_of_the_list)
...