我在我的项目中使用numpy.asarray
来处理数组,因为它与默认的Python列表相比具有极高的效率。我也应该在分配数组时处理内存利用,因为我的程序可以接收千兆字节的大数据。在检查numpy.asarray时,我发现除非声明,否则数据类型是从数组本身推断出来的。因此,我有以下数组:
np.asarray([list(map(int, list(x))) for x in X])
当我打印print X.dtype
时,我得到int64
。由于此处的数组X
始终包含二进制值0或1,因此我想使用dtype=np.int8
来减少分配空间时所需的内存。但我不确定这是不是一个好主意!我应该坚持使用默认的int64
吗? int8
可能会丢失我无法想到的任何数据精确度吗?
谢谢。
答案 0 :(得分:2)
来自NumPy Manual:
类型之间的数组类型和转换
Data type Description ... int8 Byte (-128 to 127) ...
如果您只想在数组中放入二进制值,那么就可以了。您不会丢失任何数据精度。
您甚至可以考虑将数据类型设置为bool_
,它以字节形式存储,绝对是您内存的最佳解决方案,也可以作为int
使用。
>>> import numpy as np
>>> x = np.asarray([1,0,1,0], dtype=np.bool_)
>>> x
array([ True, False, True, False], dtype=bool)
>>> x + 2
array([3, 2, 3, 2])