对不起,措辞,最大的元组,我的意思是元组中的第一个值很大。
AccuList = list()
Result = tuple()
for V in itertools.combinations(variable_list, 5):
variable_to_use = list(V)
for i in range(0,100):
Accuracy = #some code to calculate
AccuList.append(Accuracy)
#Mean
M = np.mean(AccuList)
#Std
D = np.std(AccuList,ddof=1)
Result = (M,D, variable_to_use)
我想找到10个'结果'元组,其中包含10个最大的M 仅通过其中的M值对元组进行排名。 如果我需要一个for循环来实现这一点,那么for循环应该在哪里(缩进的地方)
答案 0 :(得分:0)
让我们保存结果:
acculist = []
# no need to define `result = tuple()` here.
result_list = [] # make a list to store results in
for v in itertools.combinations(variable_list, 5):
for i in range(0, 100):
...
m = np.mean(acculist)
d = np.std(acculist, ddof=1)
result = (m, d, list(v))
result_list.append(result) # add each result to the list
然后对列表进行排序。元组已经按第一个元素排序(然后是第二个,然后是第三个,......,然后是第n个),所以我们只需要反转顺序以获得降序排序而不是升序排序。
result_list.sort(reverse=True) # descending instead of ascending
并切掉前十项
top_ten = result_list[:10]
答案 1 :(得分:0)
将您的元素添加到堆中,从堆中弹出10个最小的项。标准库中的heapq
模块使这一点变得特别简单。
import heapq
results = []
for V in itertools.combinations(variable_list, 5):
variable_to_use = list(V)
accu_list = [ ... for i in range(100)]
m = np.mean(accu_list)
d = np.std(accu_list, ddof=1)
results.append((m, d, variable_to_use))
heapq.heapify(results)
ten_largest = heapq.nlargest(10, results)
这明显快于排序。预先给定所有项目的堆只需O(n)
次,而排序需要O(n lg n)
次。从堆中获取常量数量的元素只需要额外的O(lg n)
时间,因此总体复杂度仍为O(n)
。