1
2
3
4
5
6
7
8
9
10
import numpy as np

example_dict = {(1, 0): 1, (1, 1): 2, (2, 0): 3, (2, 1): 4}
np.save('filename', example_dict)

loaded_dict = np.load('filename.npy', allow_pickle=True)
print(loaded_dict) # Works just fine, prints out the example dict
print(type(loaded_arrs)) # Outputs <class 'numpy.ndarray'>
print(loaded_dict.shape) # Outputs ()
print(loaded_dict[(1, 0)]) # Does not work, Error below

输出如下:

1
2
3
4
{(1, 0): 1, (1, 1): 2, (2, 0): 3, (2, 1): 4}
<class 'numpy.ndarray'>
()
IndexError: too many indices for array

没错没错!就是这个问题卡了我一个小时,我真的是无语了,理解原理一个小时,写代码一个小时,查bug查了一个小时:写下这个问题提醒自己

不要小瞧这个问题,我在运用HMM模型进行拼音转汉字的时候,它没有报错,但最后的输出真的痛彻我心扉。一个句子翻译的乱七八糟的,精度0.1都不到,最好的一个0.25

下面是我们的解决办法:
loaded_dict是一个numpy.ndarray,而不是字典。我们可以使用.item()方法访问字典,

1
loaded_dict.item()[(1, 0)]

如果要访问所有可以使用的词典值:

1
2
for key,value in loaded_dict.item().items():
print(value)