散乱数据的二维整合(python)

2D integration of scattered data (python)

我在 X 和 Y 上有一些值为 A 的分散数据。我想在 X 和 Y 上整合 A。但是我的数据不在笛卡尔网格上(数据点之间的 X、Y 间距变化很大)并且数据点占据的X,Y域是一个复杂的形状(具体面积未知)

有没有简单的方法来整合这些数据?

我做了以下事情:

  • 对域进行三角测量
  • 计算每个三角形的积分
  • 对三角形积分求和(由于积分可加性可以完成属性)

假设我们有以下数据:

import numpy as np
X = np.array([0, 0, 1, 1, 1.5])
Y = np.array([0, 1.1, 0, 1, 1.3])
A = np.array([2, 1.1, 0.5, 2, 0.3])

我们使用 scipy:

进行三角测量
from scipy.spatial import Delaunay
domain_points = np.array(list(zip(X,Y)))
tri = Delaunay(domain_points)

我们计算积分:

def area_from_3_points(x, y, z):
    return np.sqrt(np.sum(np.cross(x-y, x-z), axis=-1)**2)/2
integral = 0
for vertices in tri.simplices:
    mean_value = (A[vertices[0]] + A[vertices[1]] + A[vertices[2]]) / 3
    area = area_from_3_points(domain_points[vertices[0]], domain_points[vertices[1]], domain_points[vertices[2]])
    integral += mean_value*area
print(integral)

Out: 2.1166666666666667