how to add (Not merging, want to perform mathematical addition i.e. element wise additon of two h5 file) two h5 files (let's sasy 1.h5 and 2.h5) and store into new h5 file, which are same in structure. I tried following:
import h5py
f = h5py.File('1.h5','r')
f1=h5py.File('2.h5','r')
f+f1
but getting following error:
TypeError: unsupported operand type(s) for +: 'File' and 'File'
Following is some information of data set which i got from f.visititems(lambda name,obj:print(name, obj))
conv2d_37 <HDF5 group "/conv2d_37" (1 members)>
conv2d_37/conv2d_37 <HDF5 group "/conv2d_37/conv2d_37" (2 members)>
conv2d_37/conv2d_37/bias:0 <HDF5 dataset "bias:0": shape (32,), type "<f4">
conv2d_37/conv2d_37/kernel:0 <HDF5 dataset "kernel:0": shape (2, 2, 1, 32), type "<f4">
conv2d_38 <HDF5 group "/conv2d_38" (1 members)>
conv2d_38/conv2d_38 <HDF5 group "/conv2d_38/conv2d_38" (2 members)>
conv2d_38/conv2d_38/bias:0 <HDF5 dataset "bias:0": shape (32,), type "<f4">
conv2d_38/conv2d_38/kernel:0 <HDF5 dataset "kernel:0": shape (2, 2, 32, 32), type "<f4">
conv2d_39 <HDF5 group "/conv2d_39" (1 members)>
conv2d_39/conv2d_39 <HDF5 group "/conv2d_39/conv2d_39" (2 members)>
conv2d_39/conv2d_39/bias:0 <HDF5 dataset "bias:0": shape (64,), type "<f4">
conv2d_39/conv2d_39/kernel:0 <HDF5 dataset "kernel:0": shape (2, 2, 32, 64), type "<f4">
conv2d_40 <HDF5 group "/conv2d_40" (1 members)>
conv2d_40/conv2d_40 <HDF5 group "/conv2d_40/conv2d_40" (2 members)>
conv2d_40/conv2d_40/bias:0 <HDF5 dataset "bias:0": shape (64,), type "<f4">
conv2d_40/conv2d_40/kernel:0 <HDF5 dataset "kernel:0": shape (2, 2, 64, 64), type "<f4">
dense_19 <HDF5 group "/dense_19" (1 members)>
dense_19/dense_19 <HDF5 group "/dense_19/dense_19" (2 members)>
dense_19/dense_19/bias:0 <HDF5 dataset "bias:0": shape (256,), type "<f4">
dense_19/dense_19/kernel:0 <HDF5 dataset "kernel:0": shape (7744, 256), type "<f4">
dense_20 <HDF5 group "/dense_20" (1 members)>
dense_20/dense_20 <HDF5 group "/dense_20/dense_20" (2 members)>
dense_20/dense_20/bias:0 <HDF5 dataset "bias:0": shape (2,), type "<f4">
dense_20/dense_20/kernel:0 <HDF5 dataset "kernel:0": shape (256, 2), type "<f4">
dropout_28 <HDF5 group "/dropout_28" (0 members)>
dropout_29 <HDF5 group "/dropout_29" (0 members)>
dropout_30 <HDF5 group "/dropout_30" (0 members)>
flatten_10 <HDF5 group "/flatten_10" (0 members)>
max_pooling2d_19 <HDF5 group "/max_pooling2d_19" (0 members)>
max_pooling2d_20 <HDF5 group "/max_pooling2d_20" (0 members)>
edit
Code copied from comments (where it is unreadable)
data = h5py.File('1.h5','r')
new_data = h5py.File('new.hdf5','w')
datasets = getdatasets('/',data)
groups = list(set([i[::-1].split('/',1)[1][::-1]
for i in datasets]))
groups = [i for i in groups if len(i)>0]
idx = np.argsort(np.array([len(i.split('/')) for i in groups]))
groups = [groups[i] for i in idx]
for group in groups:
new_data.create_group(group)
for path in datasets:
group = path[::-1].split('/',1)[1][::-1] if len(group) == 0: group = '/'
data1=h5py.File('2.h5','r') datasets1 = getdatasets('/',data1)
groups1 = list(set([i[::-1].split('/',1)[1][::-1] for i in datasets1]))
groups1 = [i for i in groups1 if len(i)>0]
idx1 = np.argsort(np.array([len(i.split('/')) for i in groups1]))
groups1 = [groups1[i] for i in idx1]
for path in datasets1:
group1 = path[::-1].split('/',1)[1][::-1]
if len(group1) == 0:
group1 = '/' #%%
for key in datasets:
new_data[key] = data[key][...] + data1[key][...]