whenever

  • Home

  • Tags21

  • Categories6

  • Archives122

  • About

python读取HDF5格式文件并保存为fvecs和ivecs格式(将HDF5格式gist数据集转换为fvecs和ivecs格式)

Posted on 2019-09-08 In HDF5

引言

网站的gist数据集下载很慢,尝试多次都失败了,科学上网也不行。github上(地址)提供了很多hdf5格式的数据集,其中也包括gist,下载速度很快。但是实验的代码处理的数据格式是fvecs和ivecs格式的,需要将hdf5格式的数据进行转换。

代码示例1(转换成fvecs格式)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import h5py
import struct

def load_hdf5_file(filename):
f = h5py.File(filename, 'r')
print('done !')
return f

def to_fvecs(filename, data):
with open(filename, 'wb') as fp:
for y in data:
d = struct.pack('I', y.size) #将y.size以C++的unsigned int的形式写入二进制文件
fp.write(d)
for x in y:
a = struct.pack('f', x) #将x以C++的float的形式写入二进制文件
fp.write(a)

if __name__ == "__main__":
f = load_hdf5_file('/home/tdlab/dataset/gist-960-euclidean.hdf5')
to_fvecs('gist_base.fvecs', f['train'])
to_fvecs('gist_query.fvecs', f['test'])

代码示例2(转换成ivecs格式)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import h5py
import struct

def load_hdf5_file(filename):
f = h5py.File(filename, 'r')
print('done !')
return f

def to_ivecs(filename, data):
with open(filename, 'wb') as fp:
for y in data:
d = struct.pack('I', y.size)
fp.write(d)
for x in y:
a = struct.pack('I', x)
fp.write(a)

if __name__ == "__main__":
f = load_hdf5_file('/home/tdlab/dataset/gist-960-euclidean.hdf5')
to_ivecs('gist_groundtruth.ivecs', f['neighbors'])
稀罕作者
Mengzhao Wang WeChat Pay

WeChat Pay

Mengzhao Wang Alipay

Alipay

# HDF5 # python
PAT乙级1030 || 完美数列(详解,C/C++示例,测试点分析)
PAT乙级1031 || 查验身份证(详解,C/C++示例,测试点分析)
  • Table of Contents
  • Overview
Mengzhao Wang

Mengzhao Wang

Try? All the way !
122 posts
6 categories
21 tags
  1. 1. 引言
  2. 2. 代码示例1(转换成fvecs格式)
  3. 3. 代码示例2(转换成ivecs格式)
© 2021 Mengzhao Wang