surface_points
是gempy.core.model.ImplicitCoKriging
类中的一个函数,用于设置模型表面上的点。通过该函数可以将数据集内的点强制约束到模型表面上,从而改善模型的精度和准确度。
surface_points
函数有两个参数:
points (tuple or ndarray)
:待约束的点的坐标。可以是一个元组或者一个ndarray数组。如果为元组,则格式为(x, y, z);如果为数组,则格式为(N, 3),其中N为点的数量。radius (float)
:约束的半径。只有距离待约束点到表面的距离小于该半径时,才会被约束到表面上。半径的单位与点的单位相同。默认值为无穷大(inf)。surface_points
函数返回一个布尔数组,表示每个点是否被约束到表面上。
以下示例演示了如何使用surface_points
函数:
import gempy as gp
import numpy as np
# 创建模型
model = gp.create_model('example')
# 设置网格
extent = [0, 1000, 0, 1000, 0, 1000]
resolution = [50, 50, 50]
gp.init_data(
model_data=model, extent=extent, resolution=resolution
)
# 添加地层
gp.add_surfaces(model, ['layer1', 'layer2'])
# 添加点
gp.set_interpolator(model, output=['res1'], theano_optimizer='fast_run')
points = np.array([
[500, 500, 200],
[400, 400, 600],
[800, 200, 800]
])
orientations = np.array([
[500, 500, 400, 0, 0, 1],
[400, 400, 600, 0, 0, 1],
[800, 200, 800, 0, 0, 1]
])
gp.set_interfaces(model, points, append=True)
gp.set_orientations(model, orientations, append=True)
# 约束点到表面
surface_mask = gp.surface_points(points, radius=50)
在上述示例中,我们首先创建了一个名为example
的模型,然后设置了网格和地层。接下来,我们添加了三个点和对应的取向,然后使用surface_points
函数约束了这三个点到模型表面上,该函数使用的约束半径为50。最后,函数返回了一个布尔数组,表示每个点是否被约束到表面上。