2015-01-01 49 views
-4

我一直在使用自组织映射(SOM)处理现实世界的数据集(.csv文件)。我试图根据最小 - 最大规范化规范化数据以提高效率。Python中的最小 - 最大规范化

但我被卡住了一个错误。错误是:"unsupported operand type(s) for list and float"

我找不到更好的解决方案,我完全失去了这一点。

for i in range(num): 
    trr=eval(str(arr[i]))[0:-31] 
print trr 
for i in range(num): 

    normalized = (trr-min(trr))/(max(trr)-min(trr)) 
print normalized 

,并在一开始所申报trr

trr = [[0 for x in range(num)] for x in range(num)] 
+0

好吧,错误本身就意味着你正在尝试用列表和浮点数来代替2浮点数。 – Basic

+0

谢谢。因为错误发生在---> normalized =(trr-min(trr))/(max(trr)-min(trr))。我只打印min(trr)和max(trr) ),并将类型列为两个列表。但是,发生的是,我收到错误“列表和列表不受支持的操作数类型”(即使这两个类型都是“列表”类型)。 – Pooja

回答

2

压痕似乎打破了,我不知道如何解决它,但是,无论如何,关键路线是:

normalized = (trr-min(trr))/(max(trr)-min(trr)) 

很明显,trr这里是一个列表(或者你不会在寻找它的minmax),但你想对它做算术 - 没有好处。我建议:

base = min(trr) 
range = max(trr) - base 
normalized = [(x-base)/range for x in trr] 

作为最有可能实现我猜你在想什么。

+0

谢谢..我已经尝试过,但问题仍然存在。这个时间错误就像--->“列表和列表不支持的操作数类型”在行----> range = max(trr) - base。 – Pooja

+0

当你打印它时,'trr'的价值是什么?在计算它并让我们知道之后,还需要'打印类型(base),base'。我想(猜测,因为你不告诉**我们:-)'trr'是一个数字列表,但也许它是一个列表或更多恶魔的列表 - ** show ** us类型和价值而不是强迫我们猜测! –