# How to define hdf5 file data as a function of some variables?

Hi experts,
I need your kind suggestion. I have a hdf5 file and I can able to read the file in python. The h5 file contains a large number of data and these are the values of potential (depends on position (x, y, z) ). I am also able to interpolate my 3D regular grid data by using RegularGridInterpolator. Now, my question is: how I can define my h5 file data as a function of x, y, z so that it can able to update my a_1 (x,y,z) , a_2(x,y,z)… values in my code. Here is my h5 file: https://drive.google.com/open?id=1OFIg7pjfpfjq3Vnvqaj2uyCFjiTwZ9QK

``````import numpy as np
import h5py
import matplotlib.pyplot as plt
from scipy.interpolate import RegularGridInterpolator

f = h5py.File('k.h5', 'r')
list(f.keys())
dset = f[u'data']
dset.shap
dset.value.shape
dset[0:64, 0:64, 0:64]
x = np.linspace(-160, 160, 64)
y = np.linspace(-160, 160, 64)
z = np.linspace(-160, 160, 64)

my_interpolating_function = RegularGridInterpolator((x, y, z), dset.value)
pts = np.array([100, 5, -10])
my_interpolating_function(pts)

# To find the gradient at any point

v1, x1, y1, z1 = my_interpolating_function(pts), gradx_interpol(
return v1, x1, y1, z1

##getting_interpolated_values

k1 = my_interpolating_function(pts)

def a_1(x,y,z):

def a_2(x,y,z):

return (1/a)*k_dx
``````

.
.
.
.

Hello!

Did you get any error or warning when executing the code you provided? I noticed in the line below:

``````my_interpolating_function = RegularGridInterpolator((x, y, z), dset.value)
``````

the use of the `.value` property (`dset.value`). It is deprecated (see its h5py code) and is also the alias for `dset[()]` which works only for scalar HDF5 datasets. I think you should use `dset[...]` instead which will provide all the HDF5 dataset’s values as a NumPy array.

If the above does not answer your question, please explain further what you are trying to achieve. Alternatively, you could consider signing up for our Kita Lab where you could upload the HDF5 file and share your Python code as a Jupyter notebook.

Regards,

``    Aleksandar``
1 Like

Thanks for your reply. Please check this link: https://drive.google.com/open?id=14lrChd9nn8M3HqH3GQrCT7OXBxVSYuD8 . But my concern is that my h5 file contains the values of potential which is depends on position (x, y, z). So, I have to define my interpolating function in such a way so that my potential values depend on x, y, z and update the values of a_1 and a_2 as they are depends on x, y, z. Can you please help me how I can define my interpolating function so that it’s depend on x, y, z.

Hello!

One correction to my previous reply: `dset.value` and `dset[...]` return the same NumPy array which holds your potential data.

Why your `my_interpolating_function` does not work? Below is a function that effectively combines several lines of your code above:

``````def potential_interpolator(potential, axes_bounds):
x_bounds, y_bounds, z_bounds = axes_bounds
x = np.linspace(x_bounds[0], x_bounds[1], potential.shape[0])
y = np.linspace(y_bounds[0], y_bounds[1], potential.shape[1])
z = np.linspace(z_bounds[0], z_bounds[1], potential.shape[2])
return RegularGridInterpolator((x, y, z), potential[...])

interp_potential = potential_interpolator(dset, ([-160, 160], [-160, 160], [-160, 160]))
``````

You would then calculate interpolated potential values with something like: `interp_potential(pts)`.

The `a_1` and `a_2` functions have some undefined variables: `adot` and `a`, so not sure what to do there.

Hope this helps!

``   Aleksandar``