Что определяет размер 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
Надеюсь, это ответит на ваш вопрос.