Я использую cPickle
для хранения словаря, элементы которого являются объектами кластеризации от sklearn.cluster
, которые делают k-mean кластеризация. Словарь, который я получаю, когда распечатывается, выглядит хорошо и, похоже, работает. Однако, когда я сравниваю его для равенства с входным словарем, он оценивается как False
.Тестирование незаполненного словаря в Python
amino_acid = 'ILE'
clusterers = {'2 ILE_chi1': MiniBatchKMeans(...),
'2 ILE_chi2': MiniBatchKMeans(...)}
output = open(''.join([amino_acid, '.pkl']), 'wb')
cPickle.dump(clusterers, output, -1)
output.close()
# Test that we can unpickle it.
input = open(''.join([amino_acid, '.pkl']), 'rb')
unpickled = cPickle.load(input)
print type(unpickled)
if clusterers == unpickled:
print "Pickled successfully."
print clusterers
else:
print "Didn't pickle."
print unpickled
print clusterers
print type(unpickled['2 ILE_chi1'])
print unpickled.keys() == clusterers.keys()
print unpickled.values() == clusterers.values()
input.close()
Соответствующий выход:
Didn't pickle.
{'2 ILE_chi1': MiniBatchKMeans(...), '2 ILE_chi2': MiniBatchKMeans(...)}
{'2 ILE_chi1': MiniBatchKMeans(...), '2 ILE_chi2': MiniBatchKMeans(...)}
<class 'sklearn.cluster.k_means_.MiniBatchKMeans'>
True
False
Кто-нибудь знает, почему MiniBatchKMeans
случаи не равны? relevant page не очень помогает в этом вопросе. Я могу взглянуть на источник sklearn
, но он наследуется от нескольких классов, и я задавался вопросом, может ли кто-то здесь объяснить это быстрее.
Что произойдет, если вы сравните их, просто произнесите «unpickled == clusterers»? Ключи и их значения могут быть возвращены в любом порядке, поэтому их сложно сравнивать с помощью этих двух методов. – nofinator
Извините, я включил это в первую итерацию. Они не сравниваются одинаково. Я думаю, что моя проблема может заключаться в том, что предложил Том Далтон ниже. –