从随机排序的列表创建数组掩码

时间:2019-01-21 14:53:00

标签: python arrays mask

我有一个数据集,该数据集由CFD模拟的非结构化网格上的速度数据组成,结构如下:

data = [[x1, y1, u1, v1], ... , [xn, yn, un, vn]]

我需要在此数据覆盖的区域内有规则的网格。但是,除了x,y值本身之外,我没有关于x,y域边界的信息。边界由复杂的几何形状定义。

我的解决方案是使用numpy.mgrid创建一个矩形网格,然后构造一个数组遮罩以遮盖没有数据的区域。

但是我不知道如何仅从随机排序的坐标中获取蒙版。我尝试使用scipy的ConvexHull来找到边界,但这是一个凹问题。但是,即使我有边界点,也不确定如何从其创建蒙版,因为索引与常规网格中的索引不同。 如何确定这个网格?还有其他可能性吗?也许对重新排序数据集有用吗?

1 个答案:

答案 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