2
class Evaluations():
    columns = {0: "participationKey", 1: "focusKey"}
    participationKey = {"high": 3, "med": 2, "low": 1}
    focusKey = {"high": 3, "med": 2, "low": 1}

    def __init__(self):
        self.data = []

    def addData(self, participation, focus):
        self.data.append((participation focus))

If I bind the above class w/another function for example:

def bindClass()
    eval = Evaluations()
    eval.addData('high','high')
    eval.addData('low', 'low')
    eval.addData('med','med')

How would I sort the data using NumPy, then iterate to show results in print? Thanks!

4

1 回答 1

3

由于您将数据存储在一个列表中,我猜它不会太大,所以 Python 的内置sorted例程应该就可以了;你可能不需要 Numpy。我还假设您要映射存储在datausingparticipationKey和/或focusKey用于排序的值。你可以做类似的事情

data = sorted(data, key=lambda pf: participationKey[pf[0]])

按映射的参与键排序。或者如果你想按参与键和焦点键的总和排序

data = sorted(data, key=lambda pf: participationKey[pf[0]] + focusKey[pf[1]])

在这些示例中,您向sorted函数传递了一个“键”,这是一个可调用函数,它将列表元素(在您的情况下,我称之为参与-焦点对pf)映射到 Python 将以您的方式排序的数值想。

要迭代和打印,只需使用 for 循环

for pf in data:
    print "participation = %s, focus = %s" % pf

如果您必须使用 Numpy,那么您需要创建一个 Numpy 索引数组进行排序,然后用于argsort获取将对数据进行排序的索引,然后将其应用回data.

import numpy as np
inds = np.array([participationKey[pf[0]] for pf in data])
sort_inds = np.argsort(inds)
sorted_data = [data[ind] for ind in sort_inds]
于 2013-10-17T20:15:57.260 回答