2017-01-21 3 views
10

Это не кажется, «разрядность» (32 против 64) процессора, см комментарии на this пост, в частности:Что определяет размер int в numpy?

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

Нор это размер междунар в C, например, на моей машине:

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

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

Edit: Там идет еще один кандидат, благодаря ЭВ-бр:

LAPACK использует 32-битные целые числа на всех архитектурах - эв-уш

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

+0

Вы можете проверить тип данных, который 'int' соответствует использованию' numpy.dtype (int) '. –

+0

@EliSadoff спасибо, но это только дает мне то, что, а не почему. –

+0

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

ответ

1

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

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

0

Итак, возможно, я не понимаю ваш вопрос, но если вы взглянете на Numpy Documentation, то я предполагаю, что numpy присваивает значения бит, исходя из того, что максимальный размер бит может увеличиваться или уменьшаться до заданной системной архитектуры. В основном, поскольку вы не указали, что целочисленному «контейнеру» требуется только 8 или 16 бит в длину, он по умолчанию был самым большим контейнером, который можно использовать на 64-битной машине.

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

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

+1

Нет, это точно не то, что происходит. В некотором смысле, вся суть вопроса в том, что то, что вы и я и другие наивно предполагаем, неверны. –

Смежные вопросы