为了保存在lmdb中,我使用numpy.ndarray.toString()将ndarray转换为字节对象,当我想使用numpy.fromString()将字节读取到ndarray时,我得到一个ndarray但是形状改变了。那么如何在它们之间转换?
我尝试将pickle与dumps()和loads()一起使用,但是
_pickle.UnpicklingError: invalid load key, '?'.
在这里保存代码:
class face_lmdb:
def add_embed_to_lmdb(self,id,vector):
self.db_file=os.path.abspath(face_comm.get_conf('lmdb','lmdb_path'))
id = str(id)
evn = lmdb.open(self.db_file)
wfp = evn.begin(write=True)
print(vector.shape)# here is (512,)
wfp.put(key=id.encode(), value=vector.toString())
wfp.commit()
evn.close()
在此处加载代码
def create_index_from_lmdb(self):
lmdb_file = self.lmdb_file
if os.path.isdir(lmdb_file):
evn = lmdb.open(lmdb_file)
wfp = evn.begin()
annoy = AnnoyIndex(self.f)
for key, value in wfp.cursor():
key = int(key)
print(type(value))#here is bytes
value = np.fromstring(value)
print(value.shape)# here is (256,)
annoy.add_item(key,value)
annoy.build(self.num_trees)
annoy.save(self.annoy_index_path)
我希望形状为(512,)
,但我得到(256,)