我在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
?
谢谢
答案 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
。