我有一个图像数据集,这些图像集按其趣味性排序。我想通过计算候选元素与子集的所有当前成员之间的成对相似性来创建一个多样化的子集。
我的代码如下。看起来工作正常;但是,您可以猜到它非常慢(需要6到7个小时)。
我想知道是否有另一种方法可以比此实现更快地创建此子集。
dataset = [a,b,c,d,e,f,g,...] #an example sorted dataset. real size is 20K
subset = [] #my diverse set. Desired size is 200
for ind, element in enumerate(dataset):
if ind == 0:
subset.append(element[ind]) #since the dataset is sorted I can directly add the first element
else:
similarities = []
for member in subset:
similarities.append(compute_similarity(element[ind], member))
if not any(similarities): #if the candidate is not similar to any of the existing members
subset.append(element[ind])
if len(subset) >= 200:
break
答案 0 :(得分:1)
我看到的主要改进是,一旦发现当前元素类似于集合中已经存在的某个元素,便立即中断。这样可以简化代码,甚至不需要对第一个元素进行额外检查。
ng s -o
or
ng serve -o
请注意for-else构造,如果for循环未中断,该构造仅执行“ else”分支。
任何其他优化将取决于您的实际相似性指标。也许您可以通过某种方式对数据进行排序,从而减少需要进行的比较。