Что определяет размер int в numpy?

Он не выглядит "битностью" (32 против 64) процессора, см. комментарии к сообщению this, в частности:

Хороший ответ. Как я уже упоминал в моих комментариях выше, я могу дублировать вопрос @suzep136 на Raspberry Pi 3, который использует 64-битный процессор ARM. Любая идея, почему проблема переполнения возникла в 64-битной архитектуре? Единственное, о чем я могу думать, это то, что lapack/blas были скомпилированы для 32-битного ядра; Кажется, я установил numpy через apt-get. - nrlakin

И это не размер int в C, например, на моей машине:

>>> import numpy, ctypes
>>> 
>>> ctypes.sizeof(ctypes.c_int)
4
>>> numpy.array([1]).dtype
dtype('int64')

Итак, от чего это зависит?

Изменить: есть еще один кандидат, спасибо ev-br:

LAPACK использует 32-битные целые числа для всех архитектур - ev-br

Изменить: частичный ответ здесь. Спасибо, Гойо. Я скопировал это и сделал его CW, чтобы вы могли добавить более тонкие точки, например, что происходит в PyPy или Jython. Меня также интересует, есть ли какие-то более глубокие причины для этого выбора.

Ответ 1

Благодаря Goyo, который слишком скромный, чтобы взять кредит. Посмотрите их ответ на связанный, но другой question.

Тип целочисленного значения по умолчанию в numpy равен numpy.int_, обязательно обратите внимание на завершающее подчеркивание. По умолчанию он равен C long 1.

Ответ 2

Хорошо, поэтому я могу не понимать ваш вопрос, но если вы посмотрите на "Документация по номеру" , я предполагаю, что бит num присваивает бит значения, основанные на том, что максимальный размер бит может увеличиваться или уменьшаться до заданной архитектуры системы. В основном, поскольку вы не указали, что целочисленному "контейнеру" требуется только 8 или 16 бит в длину, он по умолчанию был самым большим контейнером, который можно использовать на 64-битной машине.

Если вы хотите найти количество бит, python имеет встроенную функцию bit_length(). Посмотрите здесь: https://docs.python.org/3.6/library/stdtypes.html#int.bit_length

Надеюсь, это ответит на ваш вопрос.