.npz 是 NumPy 的压缩存档格式,里面通常会打包多个数组。平时遇到训练数据、字典映射这类文件,最直接的办法就是用 np.load() 先把它打开,再按键名把内容取出来。
导入包
import numpy as np
加载数据
poem = np.load('tang.npz', allow_pickle=True)
这里用 NumPy 的 load() 读取 .npz 文件:
file_path:要加载的文件路径allow_pickle=True:允许读取包含 Python 对象的数据,比如字典或列表- 返回值是一个
NpzFile对象,这里保存到poem
看看里面有什么
print(poem.files)
files 会列出这个归档里所有数组的名字。这个例子里有三个数组。
取出数组内容
ix2word, word2ix, data = poem['ix2word'], poem['word2ix'], poem['data']
print(ix2word)
print(word2ix)
print(data)
ix2word 和 word2ix 分别是索引到汉字、汉字到索引的映射,data 则是实际的数据序列。后面解码时主要靠前两个映射表。
把 0 维数组转回 Python 对象
ix2word = ix2word.item()
如果原始数据本来就是 Python 对象,比如字典,np.load('file.npz', allow_pickle=True) 读出来后常常会变成一个 0 维数组。这个时候直接下标访问会报错:IndexError: too many indices for array: array is 0-dimensional, but 1 were indexed。先用 type(ix2word) 看一眼,基本就能判断是不是这个情况。
取出 data 第一行并还原字符
for i in range(data.shape[1]): # data 为二维数组
print(ix2word[data[1][i]], end=)

