我正在尝试将某个 h5 数据集栅格化为三角形网格。我想避免使用 QGIS,因为加载结果很耗时,所以我试图用 python 来实现。
我将值导入为 numpy 数组并将其转换为 pandas 数据框,如下所示
import h5py
import numpy as np
f = h5py.File(os.path.join(path,file),'r')
DF5Obj = f['path/to/values/inside/h5/organizer']
Array = np.array(DF5Obj['some_index'])
df_Var = pd.DataFrame(Array)
结果是一个单列的 pandas 数据框。
然后,从 sam h5 文件中,我按如下方式导入三角形几何图形:
df_CellsAll = pd.DataFrame(np.array(f['/CellsAll/Topology/']))
df_CellsAll.columns = ['V1','V2','V3']
df_NodesAll = pd.DataFrame(np.array(f['/NodesAll/Coordnts/']))
df_NodesAll.columns = ['X','Y','Z']
生成的数据帧在下文中报告。
df_CellsAll
包含顶点,即点的 ID,组成三角形(1 行 = 1 个三角形)
V1 V2 V3
0 3074 11298 2755
1 22113 19404 2938
2 2893 20785 13879
3 20472 21061 21064
4 2846 2768 11299
... ... ... ...
349018 60356 175663 175664
349019 60392 68597 175665
349020 68597 61994 175665
349021 84310 76828 175666
349022 76828 86305 175666
和
df_NodesAll
包含点的坐标(1行=1点)
X Y Z
0 730276.367143 5.088697e+06 305.546265
1 730275.790000 5.088697e+06 305.191101
2 730058.090233 5.088762e+06 271.104492
3 730049.725534 5.088758e+06 270.111938
4 729794.066720 5.088584e+06 228.502640
... ... ... ...
175662 730145.876109 5.088131e+06 293.498749
175663 729111.338338 5.088125e+06 179.040268
175664 729110.993515 5.088128e+06 178.975510
175665 729877.943429 5.088636e+06 241.432709
175666 730142.940335 5.088687e+06 286.965424
我想做的是结合
df_CellsAll
和df_NodesAll
生成一个新的DataFrame(df_Triangles
),它类似于df_CellsAll,但包含每个顶点的(X,Y)坐标。
以这种方式
join
或 merge
两个 pandas 数据帧的最佳方法是什么?我可以遍历数据框行,但有没有办法更有效地做到这一点,或者我是否面临无法避免迭代的问题?
我的问题的更多背景信息:
我这样做的原因是因为我想创建一个栅格并根据结果 df 中包含的值对每个像素的值进行插值。可能是一个三角形包含超过 1 个像素,所以我的想法是:
df_Var
df 附加到新的);如果有人认为有更好的方法从 h5 文件中插入栅格,我很乐意收到任何建议。