使用lambda时list不可调用错误

时间:2015-01-30 17:34:38

标签: python list lambda key sorted

我正在研究一种聚类算法的数据集,我需要根据距离对数据点进行排序 这里的数据类型为ndarray(n维数组)

import numpy as np
data = np.genfromtxt(fname="irisdataset.txt",delimiter="")

def sort_by_distance(data):

   sum = 0
   for point in data:
        sum += point*point
   return np.sqrt(sum)

sorted(data,key=[lambda x:sort_by_distance(x) for x in data])

我在这里收到错误:

Traceback (most recent call last):
  File "C:/Users/abdullah/MainProject/load.py", line 13, in <module>
   sorted(data,key=[lambda x:sort_by_distance(x) for x in data])
TypeError: 'list' object is not callable

我是python的新手,所以任何人都让我知道为什么我会收到此错误

1 个答案:

答案 0 :(得分:2)

您收到错误是因为您将列表传递给sorted的关键参数。但是sorted期望关键参数是函数

在不了解data(它的结构)的情况下,很难说如何解决问题。我的猜测是data看起来像这样:

data = np.array([[1, 2], [3, 4], ...])

并且您希望对每个&#34;点&#34;进行排序距离原点的距离。在这种情况下,np.dot应该是一个很好的关键功能。

print sorted(data, key=np.dot)