我有一个数据集,该数据集由CFD模拟的非结构化网格上的速度数据组成,结构如下:
data = [[x1, y1, u1, v1], ... , [xn, yn, un, vn]]
我需要在此数据覆盖的区域内有规则的网格。但是,除了x,y值本身之外,我没有关于x,y域边界的信息。边界由复杂的几何形状定义。
我的解决方案是使用numpy.mgrid
创建一个矩形网格,然后构造一个数组遮罩以遮盖没有数据的区域。
但是我不知道如何仅从随机排序的坐标中获取蒙版。我尝试使用scipy的ConvexHull来找到边界,但这是一个凹问题。但是,即使我有边界点,也不确定如何从其创建蒙版,因为索引与常规网格中的索引不同。 如何确定这个网格?还有其他可能性吗?也许对重新排序数据集有用吗?
答案 0 :(得分:0)
我真的不熟悉您的用例,因此在这里我可能不太了解。听起来您正在有效地寻找每个坐标系的最小值/最大值来创建遮罩?从概念上讲(对于大型数据集可能无效):
df %>%
cleaning %>%
dplyr::mutate(contacts_jaccard = jaccardV(user_data.contacts, lag(user_data.contacts)))
基于这一点,我认为您可以说类似“ x的域为x_min = min([a[0] for a in data])
”
这是一个完整的示例,您可以复制/粘贴以查看它是否产生了您想要的内容:
[x_min, x_max]
产生此结果:
from random import randint
# Convenience
def r():
return randint(-100, 100)
# Generate 100 random coordinates
data = [[r(), r(), r(), r()] for _ in range(0, 100)]
x_min = min([a[0] for a in data])
x_max = max([a[0] for a in data])
y_min = min([a[1] for a in data])
y_max = max([a[1] for a in data])
u_min = min([a[2] for a in data])
u_max = max([a[2] for a in data])
v_min = min([a[3] for a in data])
v_max = max([a[3] for a in data])
print(f'X-Range: {x_min} to {x_max}')
print(f'Y-Range: {y_min} to {y_max}')
print(f'U-Range: {u_min} to {u_max}')
print(f'V-Range: {v_min} to {v_max}')
X-Range: -98 to 96
Y-Range: -100 to 96
U-Range: -95 to 100
V-Range: -100 to 100
中的任何单个条目都可能是这样的:
data