Ответ 1
Здесь - строки, в которых _typelessdata
построено в пределах numeric.py
:
_typelessdata = [int_, float_, complex_]
if issubclass(intc, int):
_typelessdata.append(intc)
if issubclass(longlong, int):
_typelessdata.append(longlong)
intc
- C-совместимое (32-битное) целое число со знаком, а int
- родной Python
целое число, которое может быть либо 32-битным, либо 64-битным в зависимости от платформы.
-
В 32-битной системе собственный тип Python
int
также 32 бит, поэтомуissubclass(intc, int)
возвращаетTrue
иintc
добавляется к_typelessdata
, который заканчивается следующим образом:[numpy.int32, numpy.float64, numpy.complex128, numpy.int32]
Обратите внимание, что
_typelessdata[-1] is numpy.intc
, а неnumpy.int32
. -
В 64-битной системе
int
составляет 64 бит, поэтомуissubclass(longlong, int)
возвращаетTrue
, аlonglong
добавляется к_typelessdata
, в результате чего:[numpy.int64, numpy.float64, numpy.complex128, numpy.int64]
В этом случае, как указал Джо,
(_typelessdata[-1] is numpy.longlong) == True
.
Чем больше вопрос, почему содержимое _typelessdata
установлено так.
Единственное место, которое я мог найти в источнике numpy, где _typelessdata
фактически используется эта строка в определении для np.array_repr
в том же файле:
skipdtype = (arr.dtype.type in _typelessdata) and arr.size > 0
Цель _typelessdata
состоит в том, чтобы гарантировать, что np.array_repr
правильно печатает строковое представление массивов, чей dtype
оказывается таким же, как и собственный (на основе платформы) собственный целочисленный тип Python.
Например, в 32-битной системе, где int
равно 32 бит:
In [1]: np.array_repr(np.intc([1]))
Out[1]: 'array([1])'
In [2]: np.array_repr(np.longlong([1]))
Out[2]: 'array([1], dtype=int64)'
тогда как на 64-битной системе, где int
равно 64 бит:
In [1]: np.array_repr(np.intc([1]))
Out[1]: 'array([1], dtype=int32)'
In [2]: np.array_repr(np.longlong([1]))
Out[2]: 'array([1])'
Проверка arr.dtype.type in _typelessdata
в приведенной выше строке гарантирует, что печать dtype
будет пропущена для соответствующего зависимого от платформы нативного целого dtypes
.