如何将许多子圆圈中包含的(大数据集)的每个点与最小的封闭圆相关联



在2D平面上,有一个以(0,0(为中心的大圆圈,其半径为RO。它包围了100个左右的圆圈,它们随机分布在整个父圆圈上,具有独特的属性(例如半径和位置(,每个圆都与唯一的整数ID相关联。(某些较小的子电路可能部分或完全在某些较大的子圈内。(

整个平面均匀地栅格分解为像素,侧面是水平和垂直的(沿坐标轴(。像素的大小是固定的,并且是先验的,但却比父圈的大小小得多。在整个父圈上有几次^5的顺序。

1%的父圆面积以覆盖10^3像素的父圆的几个团块的形式进行着色。这些彩色像素大多在子圆形内。所有这些都完全在父圈内。为我们提供了所有有色网格的(中心(的2D笛卡尔坐标。

每个彩色网格与包含它的最小子圆相关。如果像素属于多个子圈,则只能选择最小的圆圈。

最后,我想计算与以上条件相关的每个子圈相关的彩色网格总数。要在Python中写这篇文章,应该将所有彩色像素存储在2D数组中。然后,对于每个子圈,应该查询数组以找到该子圈中包含的所有网格。对于每个这样的网格,应该测试它是否在子圆内。如果是这样,除非已经与较小的子圆相关联,否则应将该网格标记为与该子圆相关联的网格。

这是我的尝试:

totals = {}
sub_circle_catalog = []
for x, y in zip(vals1, vals2):
    enclosing_circles = {}
    for id, position, radius in zip(ids_data, positions_data, radiuss_data): 
        if (np.sqrt(pow(x-position[0], 2)+pow(y-position[1], 2)) < radius):
            enclosing_circles[id] = float('{:.3f}'.format(radius))
            # choose the corresponding ID with the smallest radius here
            smallest_enclosing_circle = min(enclosing_circles, key=enclosing_circles.get)
            sub_circle_catalog.append((enclosing_circles[smallest_enclosing_circle], 1)) 
            # add up all special grids in each sub-circle when looping over all grids
for key, value in sub_circle_catalog:
    totals[key] = totals.get(key, 0) + value

我想知道我是否正确地进行了协会。我不知道如何实现每一个网格仅分配给子圈的约束。特别是,如何在所有特殊网格上循环以计算每个子圈的总预算?

找到包含 special 彩色网格的所有子圆后,需要选择最小的子圈。我的做法是错误的,因为它是在所有子圆圈都被循环之前完成的。但是,我在这里进行的更正是,我确保所有子圆圈都对任何单个 special 网格都循环,并且在移至第一个 special 网格之前,我需要断言一条线条,以照顾最小的本地子圈并将其存储到某些列表中。由于每个 special 网格都是这样照顾的,因此所有最小的子圆圈都添加到空列表中(在开始时初始化(。一旦所有特殊网格都以这种方式进行了研究,我们就可以将单个贡献的总和添加到空词典中(在开始时初始化(。所有这些都是在与第一个for语句的范围相同的范围内完成的。这是正确的代码:

totals = {}
sub_circle_catalog = []
for x, y in zip(vals1, vals2):
    enclosing_circles = {}
    for id, position, radius in zip(ids_data, positions_data, radiuss_data): 
        if (np.sqrt(pow(x-position[0], 2)+pow(y-position[1], 2)) < radius):
            enclosing_circles[id] = float('{:.4f}'.format(radius))
    # choose the corresponding ID with the smallest radius here
    if enclosing_circles != {}:
        smallest_enclosing_circle = min(enclosing_circles, key=enclosing_circles.get)
        sub_circle_catalog.append((enclosing_circles[smallest_enclosing_circle], 1)) 
# add up all special grids in each sub-circle when looping over all grids
for key, value in sub_circle_catalog:
    totals[key] = totals.get(key, 0) + value
    totals = collections.OrderedDict(sorted(totals.items()))
    totals = list(totals.items())
    with open('/the/path/to/the/file.txt', "a") as my_file:
        print('{}'.format(totals), file=my_file)
        my_file.close()

最新更新