在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()