2015-01-01 64 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類型和價值而不是強迫我們猜測! –