将Numpy savetxt从使用数据类型int16更改为int8

时间:2018-03-27 16:38:08

标签: python python-3.x python-2.7

我在numpy中使用INSERT INTO Table2 ( Player_Name, Player_Number, Cliet_Name, Client_country, Player_country, Rating ) SELECT Player_Name, Player_Number, Cliet_Name, Client_country, Player_country, MAX(ABS(Rating)) OVER (PARTITION BY player_Name ORDER BY Cliet_Name, Client_country) as Rating FROM table1 来存储包含二进制值的文本文件,如下所示:

savetxt

我意识到np.savetxt(filepath, Arr, fmt='%d') 使用fmt='%d'数据类型(每个值为2个字节),即使int16创建为Arr也是如此。例如:

np.int8

产生大小为128 KB的def convert_size(size_bytes): if size_bytes == 0: return "0B" size_name = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB") i = int(math.floor(math.log(size_bytes, 1024))) p = math.pow(1024, i) s = round(size_bytes // p, 2) return "%s %s" % (s, size_name[I]) n = 1000 dim = 64 Arr = np.random.choice(np.array([0, 1], dtype=np.int8), size=(n, dim)) Arr = np.unique(Arr, axis=0) print(convert_size(Arr.nbytes)) filepath = open('test.txt', 'w') np.savetxt(filepath, Arr.astype(np.int8), fmt='%d') filepath.close() ,而我期望64 KB。由于我要编写的值是二进制的,而且非常大,我想使用test.txt来保存文件的大小,我如何强制int8使用np.savetxt

谢谢

1 个答案:

答案 0 :(得分:1)

您严重误解了numpy.savetxt使用的格式。它不是int16或int8或类似的东西。它是文字。这就是为什么它说txt

您为每个号码花费了两个字节,因为

1 0 0 1 0 1 1 0 ...
1 1 1 1 0 0 0 0 ...

每个数字需要两个字节,一个用于数字,一个用于分隔空格。如果您的数字有更多的十进制数字,则需要更多的字节。

如果要以二进制格式保存数组,请考虑numpy.save