如何找到最小的numpy数据类型以存储最大的整数值?

5

我需要创建一个非常大的numpy数组,它将保存非负整数值。我提前知道最大的整数是多少,所以我想尝试使用可能的最小数据类型。目前为止,我的代码如下:

>>> import numpy as np
>>> def minimal_type(max_val, types=[np.uint8,np.uint16,np.uint32,np.uint64]):
    ''' finds the minimal data type needed to correctly store the given max_val
        returns None if none of the provided types are sufficient
    '''
    for t in types:
        if max_val <= np.iinfo(t).max:
            return t
    return None

>>> print(minimal_type(42))
<class 'numpy.uint8'>
>>> print(minimal_type(255))
<class 'numpy.uint8'>
>>> print(minimal_type(256))
<class 'numpy.uint16'>
>>> print(minimal_type(4200000000))
<class 'numpy.uint32'>
>>> 

是否有一种内置于 numpy 的方法可以实现此功能?

1个回答

9

这是 numpy.min_scalar_type。以下是文档中的示例:

>>> np.min_scalar_type(10)
dtype('uint8')
>>> np.min_scalar_type(-260)
dtype('int16')
>>> np.min_scalar_type(3.1)
dtype('float16')
>>> np.min_scalar_type(1e50)
dtype('float64')
>>> np.min_scalar_type(np.arange(4,dtype='f8'))
dtype('float64')

你可能对浮点数的行为不感兴趣,但我会将其包含进来以便其他遇到这个问题的人参考,特别是因为使用float16和缺乏浮点数转整数的可能会令人惊讶。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接