【问题标题】:2D integration of scattered data (python)分散数据的二维整合(python)
【发布时间】:2020-08-07 13:06:10
【问题描述】:

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

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

【问题讨论】:

  • 你的意思是什么类型的集成,某种在网格/网格上的离散集成?
  • @FallenApart 是的,离散集成会很好。
  • 您能谈谈您的数据格式吗?它是一个 numpy 数组吗?
  • @FallenApart 我有三个 1D ndarray(用于 X、Y 和 A)。数据点 i 为 (arrayX[i], arrayY[i], arrayA[i])
  • 数据来自 CDF 网格,但我无法访问数据点之间的连接

标签: python integration


【解决方案1】:

我做了以下事情:

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

假设我们有以下数据:

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

【讨论】:

    猜你喜欢
    • 2014-08-31
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    相关资源
    最近更新 更多