我的以下代码生成类似矩阵,其中包含二进制表示形式的值:
import sys
import random
Arr = list(set([random.randint(0, 2 ** 8) for i in range(10)]))
Arr = [('{0:08b}').format(i) for i in Arr]
Arr = np.asarray([list(map(int, list(i))) for i in Arr])
print Arr
print "dtype= %d , size of Arr is (%d) bytes \n" % (Arr.itemsize, sys.getsizeof(Arr))
结果是:
dtype= 8 , size of Arr is (752) bytes
正如您所看到的,似乎Numpy
为每个二进制数字选取了8
字节,其总大小为Arr = 752 bytes
。但是,我的代码应生成范围为random.randint(0, 2 ** 128)
的1000万个值的矩阵。为了减少总尺寸,我的一位朋友建议我使用dtype=np.int8
作为np.asarray([list(map(int, list(i))) for i in Arr], dtype=np.int8)
。应用后,结果变为:
dtype= 1 , size of Arr is (192) bytes
从752
到192
字节的巨大缩减。由于我们两个都是Python编程的新手,这是缩小尺寸的正确方法吗?
谢谢