Python 为形状指定二维聚集坐标 我考虑2D(10x10)矩阵的情况,当前填充有零点(在某种意义上说,是非活动网格)。 在某个时刻,某些矩阵元素将变为活动状态(因此,值1将被赋予属性)
发生这种情况的方法是在矩阵上传递一个将被激活的(X,Y)坐标列表。顺序或哪些元素将首先出现是未知的。在矩阵上变为活动的区域可以与矩阵中的一个元素(1x1)一样大,或者网格的某些部分(簇)以特定模式变为活动,如本例中所示: 首先,我能够将活动的相邻元素组合在一起,并获得有关“集群”的一些信息:集群中活动元素的数量,以及行和列的宽度。 例如,右上角的簇有3个活动元素,行宽为2,列宽为2 我的目标是将这些簇与预定义的形状相匹配,这些形状由它们的ID标识: 有了每个簇的活动元素数量,可以进行第一次粗分类:Python 为形状指定二维聚集坐标 我考虑2D(10x10)矩阵的情况,当前填充有零点(在某种意义上说,是非活动网格)。 在某个时刻,某些矩阵元素将变为活动状态(因此,值1将被赋予属性),python,matrix,cluster-analysis,shapes,Python,Matrix,Cluster Analysis,Shapes,发生这种情况的方法是在矩阵上传递一个将被激活的(X,Y)坐标列表。顺序或哪些元素将首先出现是未知的。在矩阵上变为活动的区域可以与矩阵中的一个元素(1x1)一样大,或者网格的某些部分(簇)以特定模式变为活动,如本例中所示: 首先,我能够将活动的相邻元素组合在一起,并获得有关“集群”的一些信息:集群中活动元素的数量,以及行和列的宽度。 例如,右上角的簇有3个活动元素,行宽为2,列宽为2 我的目标是将这些簇与预定义的形状相匹配,这些形状由它们的ID标识: 有了每个簇的活动元素数量,可以进行第一次粗
- 如果簇中有一个元素处于活动状态->形状ID 0
- 如果簇中有两个元素处于活动状态->形状ID 1或2
- 如果一个簇中有三个元素处于活动状态->形状ID 3-8
- 如果一个簇中有四个元素处于活动状态->形状ID 9-27
- 如果列宽为3,行宽为1->形状ID 5
- 如果列宽为2,行宽为2->形状ID 3、4、6或7
- 如果列宽为1,行宽为3->Shape ID 8
我需要一些时间来实现这一点,因为我必须自己生成更高级别的形状。但我确实遵循了你的推理,而且毫无瑕疵。非常感谢你的帮助@没问题,很高兴这有帮助!我需要一些时间来实现这一点,因为我必须自己生成更高级别的形状。但我确实遵循了你的推理,而且毫无瑕疵。非常感谢你的帮助@没问题,很高兴这有帮助!
import numpy as np
#assume we have clusters of the form
#C = [[i1,j1],[i2,j2],...,[ik,jk]]
#let "Clusters" be the set of all such Cs
#let "Shapes" be a set of tuples containing the
#coordinates of all the shapes you defined,
#plus the corresponding id
#i.e. Shapes = [[shape1,ID1],[shape2,ID2]...]
def gen_hash(cluster):
sorted = np.lexsort(cluster)
smallest = sorted[0]
sorted[:,0]-=smallest[0]
sorted[:,1]-=smallest[1]
return str(sorted)
shape_ids = {gen_hash(shape):ID for (shape,ID) in Shapes}
for c in Clusters:
c_hash = gen_hash(c)
c_id = shape_ids[c_hash]
print('this cluster has ID :',c_id)