散乱数据的二维整合(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
我在 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