Python中的优雅优化

Python中的优雅优化,python,optimization,Python,Optimization,我有一些解决这个问题的方法,但我知道在某个地方有一个优雅的解决方案,也许是一个两行程序 我有大量可供选择的项目,基本上是具有数字特征的字典,如: ItemOne={宽度:5,高度:10,成本:200,…} 我想将这组词典/条目分成N(2,3,…)组,以便根据标准将宽度、高度或其他特征之间的差异保持在最小(我认为是差异的平方和)。标准的部分不是问题,我只是很难找到最好的方法来分割数据集并获得所有组合,而不重复子集。不太清楚你在问什么,但我会试一试 #example items items = [{

我有一些解决这个问题的方法,但我知道在某个地方有一个优雅的解决方案,也许是一个两行程序

我有大量可供选择的项目,基本上是具有数字特征的字典,如: ItemOne={宽度:5,高度:10,成本:200,…}


我想将这组词典/条目分成N(2,3,…)组,以便根据标准将宽度、高度或其他特征之间的差异保持在最小(我认为是差异的平方和)。标准的部分不是问题,我只是很难找到最好的方法来分割数据集并获得所有组合,而不重复子集。

不太清楚你在问什么,但我会试一试

#example items
items = [{'width':5, 'height':10, 'cost':200}, {'width':6, 'height':9, 'cost':2}]

#whatever you want your criteria to be
def calculate_criteria(item):
    return item['width']+item['height']+item['cost']

# create subsets based on criterion
subsets = {}
for item in items:
    criteria = calculate_criteria(item)
    subset = subsets.get(criteria, list())
    subset.append(item)
    subsets[criteria] = subset

print subsets
{17: [{'width': 6, 'cost': 2, 'height': 9}], 215: [{'width': 5, 'cost': 200, 'height': 10}]}
或者更好地使用
集合。defaultdict

# create subsets based on criterion
subsets = collections.defaultdict(list)
for item in items:
    subsets[calculate_criteria(item)].append(item)

不是很清楚你在问什么,但我会试一试

#example items
items = [{'width':5, 'height':10, 'cost':200}, {'width':6, 'height':9, 'cost':2}]

#whatever you want your criteria to be
def calculate_criteria(item):
    return item['width']+item['height']+item['cost']

# create subsets based on criterion
subsets = {}
for item in items:
    criteria = calculate_criteria(item)
    subset = subsets.get(criteria, list())
    subset.append(item)
    subsets[criteria] = subset

print subsets
{17: [{'width': 6, 'cost': 2, 'height': 9}], 215: [{'width': 5, 'cost': 200, 'height': 10}]}
或者更好地使用
集合。defaultdict

# create subsets based on criterion
subsets = collections.defaultdict(list)
for item in items:
    subsets[calculate_criteria(item)].append(item)

也许您的解决方案可以由codereview.stackexchange.com审查?根据您的描述,您还可以应用k-means算法。目前的形式还很不清楚,就像@mmgp一样,我的第一个想法是k-means算法。我将从更一般的聚类分析()开始,其中k-means是常用的。看起来您可能正在进行某种类型的聚类。也许您的解决方案可以由codereview.stackexchange.com审查?根据您的描述,您还可以应用k-means算法。目前的形式还很不清楚,就像@mmgp一样,我的第一个想法是k-means算法。我将从更一般的聚类分析()开始,其中k-means是常用的。看起来您可能正在进行某种类型的集群。