【发布时间】:2019-02-17 13:56:24
【问题描述】:
我正在使用 numpy.dtype=object 在 numpy 数组中输入高值(大于 2^70):
numpy.array([1], dtype=numpy.object) << 70
array([1180591620717411303424], dtype=object)
我在这里使用 dtype=numpy.object 的唯一原因是,当您尝试在其中输入高值时,超过了 numpy.int 的限制。
numpy.array([1]) << 70
>>> array([64], dtype=int32) #the result should have been array([1180591620717411303424], dtype=object)
详细信息在我的另一个问题here. 中进行了说明。在这种情况下,使用 dtype=object 可以正常工作。
但我发现使用 dtype=numpy.object 很慢。
您可以看到 dtype=int 快得多。
那么在 numpy 数组中输入高值有什么解决方法吗?
【问题讨论】:
-
docs.scipy.org/doc/numpy/user/basics.types.html,你最好的选择可能是
uint64(仍然太小),或者使用双精度浮点数。 -
这里的大图是什么?您想用这些庞大的数字实现什么目标?
-
我正在建立一个人与视频的位图索引,其中我有很多视频(超过 1000 个),用于有限的一组人(大约 100 个)。因此,每个单元格代表该人是否出现在视频中(1)或不出现(0)。该表存储在一个文件中。现在,当我想知道两个人是否一起出现在视频中时,我会读取这两个人的相应行并执行按位“与”运算以获得结果并找到存在“1”的索引。所以做这个按位'AND',我需要先将二进制列表转换为整数,然后计算结果。
-
每个视频使用一对 uint64 值,你必须有位掩码。如果需要,您可以定义这样的自定义 dtype。