【问题标题】:What determines the size of int in numpy?什么决定了numpy中int的大小?
【发布时间】:2017-06-06 13:42:00
【问题描述】:

这似乎不是处理器的“位数”(32 对 64),请参阅this 帖子上的 cmets,特别是:

很好的答案。正如我在上面的 cmets 中提到的,我可以在使用 64 位 ARM 处理器的 Raspberry Pi 3 上复制 @suzep136 的问题。知道为什么在 64 位架构上会出现溢出问题吗?我唯一能想到的是 lapack/blas 是为 32 位内核编译的;我想我是通过 apt-get 安装 numpy 的。 ——nrlakin

也不是 C 中 int 的大小,例如在我的机器上:

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

那么,它取决于什么?

编辑:还有另一位候选人,谢谢 ev-br:

LAPACK 在所有架构上都使用 32 位整数 – ev-br

编辑:部分答案是here。谢谢高约。 我已将其复制并制作为CW,因此您可以添加更精细的点,例如PyPy 或Jython 中发生的情况。我也很想知道这种选择是否有更深层次的原因。

【问题讨论】:

标签: python numpy


【解决方案1】:

感谢Goyo,他太谦虚了,无法接受。查看他们对相关但不同的question 的回答。

numpy 中默认的整数类型是numpy.int_,一定要注意尾部的下划线。默认为 C long 1

【讨论】:

    【解决方案2】:

    好的,所以我可能会误解您的问题,但如果您查看Numpy Documentation,我的猜测是 numpy 根据给定系统架构的最大位大小可能会上升或下降来分配位值。基本上,因为您没有指定整数“容器”只需要 8 或 16 位的长度,所以它默认为 64 位机器上可能的最大容器。

    如果你想找到位数,python 有一个内置的“bit_length()”函数。在这里查看:https://docs.python.org/3.6/library/stdtypes.html#int.bit_length

    希望这能回答你的问题。

    【讨论】:

    • 不,事实并非如此。从某种意义上说,问题的全部意义在于,你我和其他人天真的假设是不正确的。
    猜你喜欢
    • 2020-03-06
    • 2011-10-26
    • 2016-02-16
    • 1970-01-01
    • 2014-08-23
    • 2020-07-16
    • 2013-04-21
    • 1970-01-01
    相关资源
    最近更新 更多