Ответ 1
Скаляр NumPy - это любой объект, который является экземпляром np.generic
или чей type
находится в np.ScalarType
:
In [12]: np.ScalarType
Out[13]:
(int,
float,
complex,
long,
bool,
str,
unicode,
buffer,
numpy.int16,
numpy.float16,
numpy.int8,
numpy.uint64,
numpy.complex192,
numpy.void,
numpy.uint32,
numpy.complex128,
numpy.unicode_,
numpy.uint32,
numpy.complex64,
numpy.string_,
numpy.uint16,
numpy.timedelta64,
numpy.bool_,
numpy.uint8,
numpy.datetime64,
numpy.object_,
numpy.int64,
numpy.float96,
numpy.int32,
numpy.float64,
numpy.int32,
numpy.float32)
Это определение происходит от поиска исходного кода для np.isscalar:
def isscalar(num):
if isinstance(num, generic):
return True
else:
return type(num) in ScalarType
Обратите внимание, что вы можете проверить, является ли что-то скаляром, используя np.isscalar
:
>>> np.isscalar(3.1)
True
>>> np.isscalar([3.1])
False
>>> np.isscalar(False)
True
Как мы знаем, что знаем? Мне нравится узнать, как люди знают то, что знают - больше, чем сами ответы. Поэтому позвольте мне попытаться объяснить, откуда взялся ответ.
Наличие правильных инструментов поможет вам разобраться в таких вещах для себя.
Я нашел это, используя IPython. Используя функцию завершения TAB, введите
In [19]: import numpy as np
In [20]: np.[TAB]
заставляет IPython отображать все переменные в пространстве имен модулей np
. Поиск строки "scalar"
приведет вас к np.ScalarType
и np.isscalar
. Typing
In [20]: np.isscalar?
(отметьте вопросительный знак в конце) предложит IPython показать вам, где np.isscalar
определено:
File: /data1/unutbu/.virtualenvs/dev/lib/python2.7/site-packages/numpy/core/numeric.py
как я понял определение isscalar
. Кроме того, документация numpy для isscalar
содержит ссылку на исходный код.