如何使用numpy.ndarray.toString()和numpy.fromString()在python 3中将字节转换为ndarray?

时间:2019-05-23 15:22:28

标签: python numpy multidimensional-array byte lmdb

为了保存在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,)

0 个答案:

没有答案