Для сохранения в lmdb я использую numpy.ndarray.toString () для преобразования ndarray в объект байтов, а когда я хочу прочитать байты в ndarray с помощью numpy.fromString (), я получаю ndarray но форма изменилась. Так как же между ними конвертировать?
Я пытался использовать pickle с dumps () и load (), но в
было исключение.
_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,)