Lel*_*rth 6 python types numpy
我需要创建一个非常大的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'>
>>>
Run Code Online (Sandbox Code Playgroud)
有没有numpy内置的方法来实现此功能?
use*_*ica 10
它是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')
Run Code Online (Sandbox Code Playgroud)
您可能对浮点数的行为不感兴趣,但无论如何我都会为遇到该问题的其他人提供它,特别是因为使用 float16 和缺乏 float->int 降级可能会令人惊讶。