2016-03-01 136 views
-3

我的代碼是下一個爲什麼顯示不支持的操作數類型(S) - :「元組」和「浮動」

data_temp = [(atributos[0],atributos[1],atributos[2],atributos[3],atributos[4],atributos[5],atributos[6],atributos[7],atributos[8],atributos[9],atributos[10],atributos[11],atributos[12],atributos[13])] 


lectura = csv.reader(open("Dataset.csv","r")) 
dis = [] #creamos una lista vacia para almacenar las distancias de cada instancia 
for index,row in enumerate(lectura): 
dato2 = [float(row[0]), float(row[1]),float(row[2]), float(row[3]),float(row[4]),float(row[5]),float(row[6]),float(row[7]),float(row[8]),int(row[9]),int(row[10]),int(row[11]),int(row[12]),int(row[13])] 
d = calcular_distancia(data_temp,dato2) 

,誤差

def calcular_distancia(d1,d2): 
distancia = ((d1[0]-d2[0])**2+(d1[1]-d2[1])**2+(d1[2]-d2[2])**2+(d1[3]-d2[3])**2+(d1[4]-d2[4])**2+(d1[5]-d2[5])**2+(d1[6]-d2[6])**2+(d1[7]-d2[7])**2+(d1[8]-d2[8])**2+(d1[9]-d2[9])**2+(d1[10]-d2[10])**2+(d1[11]-d2[11])**2+(d1[12]-d2[12])**2+(d1[13]-d2[13])**2) 
return math.sqrt(distancia) 

完成計劃
distancia = ((d1[0]-d2[0])**2+(d1[1]-d2[1])**2+(d1[2]-d2[2])**2+(d1[3]-d2[3])**2+(d1[4]-d2[4])**2+(d1[5]-d2[5])**2+(d1[6]-d2[6])**2+(d1[7]-d2[7])**2+(d1[8]-d2[8])**2+(d1[9]-d2[9])**2+(d1[10]-d2[10])**2+(d1[11]-d2[11])**2+(d1[12]-d2[12])**2+(d1[13]-d2[13])**2) 

TypeError: unsupported operand type(s) for -: 'tuple' and 'float' 
+1

尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現它所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:如何創建最小,完整和可驗證示例。 – IanAuld

+1

這與[tag:c]有什麼關係?另外,我們需要一個[MCVE]。 –

+0

歡迎來到StackOverflow。請閱讀並遵守幫助文檔中的發佈準則。 [最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)適用於此處。在您發佈代碼並準確描述問題之前,我們無法有效幫助您。 – Prune

回答

0

您的d1和d2變量不是浮動列表。相反,它們是元組列表。在你的代碼中你沒有顯示的地方,d1 [i]和d2 [i]被分配了元組值。另外,要計算你的距離,我會做以下事情:如果你有2個浮動列表。 將索引映射到d1和d2平方中相應索引的差值。然後求和平方差表。這將有助於減少你的長期總結。

return math.sqrt(sum(list(map(lambda i: (d1[i] - d2[i])**2, range(len(d1)))))) 
0

它看起來像您傳遞一個元組列表到您的calcular_distancia功能作爲第一個參數d1。你可能預期data_tempfloat值的列表,但它實際上是(1)14元元組的列表,如下圖所示:

>>> data_temp = [(atributos[0],atributos[1],atributos[2],atributos[3],atributos[4],atributos[5],atributos[6],atributos[7],atributos[8],atributos[9],atributos[10],atributos[11],atributos[12],atributos[13])] 
>>> type(data_temp) 
<type 'list'> 
>>> type(data_temp[0]) 
<type 'tuple'> 
>>> len(data_temp) 
1 
>>> len(data_temp[0]) 
14 

根本問題,我懷疑,是你用當定義data_temp時,方括號內爲[],括號內爲()。如果您刪除data_temp定義中的(),則應該得到您期望的結果。

相關問題