【发布时间】:2019-01-12 20:07:01
【问题描述】:
我是一个新的 python 用户。我有一个 h5 文件,它是固定红移时引力势的快照。我已经阅读了 python 中的 h5 文件,现在我想编写一个代码,该代码将通过使用三线性插值来给出 (x, y, z) 给定值的重力势值。你们中的任何人都可以帮我这样做吗?为了您的好意,代码如下:
In [1]: import numpy as np
In [2]: import h5py
In [3]: from scipy.interpolate import RegularGridInterpolator
In [4]: f = h5py.File('my.h5', 'r')
In [5]: list(f.keys())
Out[5]: [u'data']
In [6]: data = f[u'data']
In [7]: data.shape
Out[7]: (64, 64, 64)
In [8]: data.dtype
Out[8]: dtype(('<f8', (3,)))
In [9]: data[0:63, 0:63, 0:63]
Out[9]:
array([[[[ 7.44284016e-09, -3.69665900e-09, 8.75937447e-10],
[ 8.00073078e-09, -2.62747161e-09, 9.82415717e-11],
[ 7.81088465e-09, -2.03862452e-09, -4.00492778e-10],
...,
[ 4.98376989e-09, -3.97621746e-09, 2.25554383e-09],
[ 5.54899844e-09, -4.09876187e-09, 2.01146743e-09],
[ 6.03652599e-09, -4.03159468e-09, 1.47328647e-09]],..............................
假设,我想通过使用#RegularGridInterpolator 函数找到点 (4.98376989e-09, -3.97621746e-09, 2.25554383e-09) 的电位值。我该怎么做?
【问题讨论】:
-
RegularGridInterpolator()有 2 个主要输入:1) 用于定义网格的点元组,以及 2) 每个网格的值数组。如果我理解您的示例data是一个网格点数组。您需要将其切成 3 个数组 (x,y,z) 并作为元组引用。值数组在哪里定义? scipy 文档有一个简单的例子,阐明了每个变量的使用。 -
docs 的哪一部分你不理解?
-
非常感谢您的评论。我不明白这部分文档: >>> from scipy.interpolate import RegularGridInterpolator >>> def f(x,y,z): ... return 2 * x3 + 3 * y2 - z >>> x = np.linspace(1, 4, 11) >>> y = np.linspace(4, 7, 22) >>> z = np.linspace(7, 9, 33) >>> 数据 = f(*np.meshgrid(x, y, z, indexing='ij', sparse=True))。因为我已经有了一个数据集,所以这里有必要定义 (x, y, z) 吗?如何制作数据集的切片?你能推荐我吗?
-
语句
x/y/z= np.linspace( )填充了定义网格的3 个数组。这些是空间中的位置(例如 x、y、z 一起定义坐标)。data=f( )在关联的 x/y/z 位置创建一组值。如果我理解您的问题,您从 HDF5 文件中提取为data的数据集就是您的values(与示例相同)。正确的?如果是这样,定义这些值位置的 x/y/z 值在哪里?这就是您需要的部分。 -
@Photon-你还在解决这个问题吗?我的回答有意义吗?我认为您需要查看所有数据集以找到具有网格定义的数据集。
标签: python scipy interpolation h5py pytables