Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 大矩阵中的簇数_Python_Algorithm_Matrix - Fatal编程技术网

Python 大矩阵中的簇数

Python 大矩阵中的簇数,python,algorithm,matrix,Python,Algorithm,Matrix,我需要将所有数字(在一个集群中可以是具有相同值的数字,例如只有5个)聚集在矩阵中,而不是像传递和返回字典一样 {number1:[[(3,4),(4,5)],[]..], number2:...}#I am using Python 我可以遍历行和列,当我发现数字不同于传递的数字x时,我开始泛光填充并创建集群,并记住访问的位置,以避免重复相同的集群,这样做是有效的。我想知道是否有人有更好的主意,更快 例如(我想对所有不同于1的数字进行聚类) 传递值1 2 1 1 2 2 1

我需要将所有数字(在一个集群中可以是具有相同值的数字,例如只有5个)聚集在矩阵中,而不是像传递和返回字典一样

    {number1:[[(3,4),(4,5)],[]..], number2:...}#I am using Python
我可以遍历行和列,当我发现数字不同于传递的数字x时,我开始泛光填充并创建集群,并记住访问的位置,以避免重复相同的集群,这样做是有效的。我想知道是否有人有更好的主意,更快

例如(我想对所有不同于1的数字进行聚类) 传递值1

2  1  1  2
2  1  2  2 
1  1  3  3

我将得到{2:[(0,0),(1,0)],[(0,3),(1,2)(1,3)],3:[(2,2),(2,3)]}

让我们将单元格值分类为
目标值和
替换值,其中具有
目标值的单元格是您要修改的单元格。您要将具有替换值的值进行聚类。
。在您的示例中,这些值恰好分别为1和(2,3)

溢流填充的一个常见应用是,将具有<代码>替换值的单元格更改为具有<代码>目标值的单元格,例如油漆应用中的桶填充工具。如果这是您的用例,您可以在每次访问单元时简单地更改单元值,这样就不需要记住您以前是否访问过它。我假设这不是您的用例

方法#1:使用字典

我会使用一个字典,以访问的单元格的(行、列)作为键。由于您希望查看是否访问了(行、列),因此可以在O(1)时间复杂度内完成。您的方法需要首先转到特定的
替换值
键,然后遍历列表以查找其中是否存在(当前行,当前列)。它的时间复杂度与O(k)成正比,其中k是列表中元素的数量。在最坏的情况下,它将是O(RxC),其中RxC是矩阵的维数

方法#2:使用布尔矩阵

另一种简单的方法是使用与单元值矩阵维数相同的布尔型矩阵。每次访问单元格时,请将其标记为True。您可以在O(1)中检查一个单元格是否已被访问

在最坏的情况下,上述两种数据结构的空间复杂度均为O(RxC)。我假设这很好,因为您已经有了一个相同顺序的矩阵来表示单元格值。

您考虑过使用吗?如果您可以将数据放入阵列中,您只需使用:

 import numpy as np
 data=np.array(<some data>)
 np.where(data!=2)
将返回比较为真的布尔数组,并且:

 data[data > 5]

将返回比较为真的值,这样您甚至可能不需要numpy.where()。

请稍候。你想用什么标准来分类?@larsmans我已经澄清了一点,你现在能帮忙吗?你的问题(如果我理解的话,因为这个问题很不清楚)与连接组件标签非常相似,泛洪填充是最慢的方法。也许你只是想要比洪水淹没更快的东西?@Damir正在聚集你的解决方案来检索访问过的位置,或者这是你本质上需要的?我的回答假设您只需要一种有效的方法来检索访问的单元格。
 data[data > 5]