在 Python 中测试 unpickled 字典
Testing unpickled dictionary in Python
我正在使用 cPickle
来存储一个字典,其项是 sklearn.cluster
中进行 k 均值聚类的聚类对象。我在解酸洗时得到的字典看起来不错并且似乎可以工作。但是,当我将它与输入字典进行相等性比较时,它的计算结果为 False
.
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
源代码,但它继承自多个 类,我想知道这里是否有人可以更快地解释。
除非有人明确地在对象上添加 eq(或类似的)方法,否则对象不会比较相等:
>>> class A(object):
... def __init__(self, thing):
... self.thing = thing
>>> b = A(1)
>>> c = A(1)
>>> b == c
False
如果您创建同一事物的 2 个副本(在本例中为 MiniBatchKMeans),而不对它们进行酸洗,它们比较相等吗?如果是这样,那么您可能想使用 scikit 提出错误。如果没有,那么您可能想使用 scikit 提出功能请求!
我正在使用 cPickle
来存储一个字典,其项是 sklearn.cluster
中进行 k 均值聚类的聚类对象。我在解酸洗时得到的字典看起来不错并且似乎可以工作。但是,当我将它与输入字典进行相等性比较时,它的计算结果为 False
.
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
源代码,但它继承自多个 类,我想知道这里是否有人可以更快地解释。
除非有人明确地在对象上添加 eq(或类似的)方法,否则对象不会比较相等:
>>> class A(object):
... def __init__(self, thing):
... self.thing = thing
>>> b = A(1)
>>> c = A(1)
>>> b == c
False
如果您创建同一事物的 2 个副本(在本例中为 MiniBatchKMeans),而不对它们进行酸洗,它们比较相等吗?如果是这样,那么您可能想使用 scikit 提出错误。如果没有,那么您可能想使用 scikit 提出功能请求!