Как преобразовать байты в ndarray в python 3, используя numpy.ndarray.toString () и numpy.fromString ()? - PullRequest
0 голосов
/ 23 мая 2019

Для сохранения в 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,)

...