您能否帮助了解原生 int 类型与 numpy.int32 或 numpy.int64 类型之间的主要区别(如果有)是什么?
最佳答案
有几个主要区别。首先是 python 整数是灵活大小的(至少在 python 3.x 中)。这意味着它们可以增长以适应任意数量的任意大小(当然,在内存限制范围内)。另一方面,numpy 整数是固定大小的。这意味着它们可以保持最大值。这是由整数中的字节数定义的(int32
vs. int64
),更多的字节包含更大的数字,以及数字是有符号还是无符号( int32
vs. uint32
),unsigned 可以容纳更大的数字,但不能容纳负数。
那么,您可能会问,为什么要使用固定大小的整数?原因是现代处理器具有用于对固定大小的整数进行数学运算的内置工具,因此对它们的计算要快得多、快得多、快得多。事实上,当数字足够小时,python 在幕后使用固定大小的整数,只有当数字太大时才切换到速度较慢、大小灵活的整数。
固定大小值的另一个优点是它们可以放置到相同类型的大小一致的相邻内存块中。这是 numpy 数组用于存储数据的格式。 numpy 所依赖的库能够对这种格式的数据进行极快的计算,实际上现代 CPU 具有加速这种计算的内置功能。使用可变大小的 Python 整数,这种计算是不可能的,因为无法说明 block 应该有多大,并且数据格式也没有一致性。
话虽如此,numpy 实际上能够创建 Python 整数数组。但它们不是包含值的数组,而是包含对保存实际 python 整数的其他内存片段的引用的数组。这不能以相同的方式加速,因此即使所有 python 整数都适合固定的整数大小,它仍然不会被加速。
Python 2 并非如此。在 Python 2 中,Python 整数是固定整数,因此可以直接转换为 numpy 整数。对于可变长度整数,Python 2 具有 long
类型。但这很令人困惑,并且认为这种困惑不值得提高性能,尤其是当需要性能的人无论如何都会使用 numpy 或类似的东西时。
关于python - native int 类型和 numpy.int 类型有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38155039/