in Python TypeError: nicht hashbarer Typ: 'numpy.ndarray'
Aug 19 2020
Ich habe versucht, einen Rückruf zu finden, aber ein Typfehler ist aufgetreten
import pandas as pd
y_test = {'o1': [0,1,0,1],'o2': [1,1,0,1],'o3':[0,0,1,1]}
y_test = pd.DataFrame (y_test)
y_pred = {'o1': [1,1,0,1],'o2': [1,0,0,1],'o3':[1,0,1,1]}
y_pred = pd.DataFrame (y_pred)
y_pred = y_pred.to_numpy()
def precision(y_test, y_pred):
i = set(y_test).intersection(y_pred)
len1 = len(y_pred)
if len1 == 0:
return 0
else:
return len(i) / len1
print("recall of Binary Relevance Classifier: " + str(precision(y_test, y_pred)))
Dieser Code hat einen Fehler angezeigt: Eigentlich versuche ich, Rückruf für Details zu Fehlern bei der Multi-Label-Klassifizierung zu finden, die unten aufgeführt sind
TypeError Traceback (most recent call last)
<ipython-input-41-8f3ca706a8e6> in <module>
16 return len(i) / len1
17
---> 18 print("recall of Binary Relevance Classifier: " + str(precision(y_test, y_pred)))
<ipython-input-41-8f3ca706a8e6> in precision(y_test, y_pred)
9
10 def precision(y_test, y_pred):
---> 11 i = set(y_test).intersection(y_pred)
12 len1 = len(y_pred)
13 if len1 == 0:
TypeError: unhashable type: 'numpy.ndarray'
Antworten
1 CarolynConway Aug 19 2020 at 20:14
Ihr numpy-Array y_testkann nicht in eine Menge konvertiert werden (in Zeile 11), da das Array zweidimensional ist.
Damit ein Iterable in ein Set konvertiert werden kann, müssen die Elemente alle hashbar sein. Für ein 1-d-numpy-Array ist das in Ordnung, da Zahlen hashbar sind:
>>> array_1d = np.array([1, 2, 3])
>>> array_1d
array([1, 2, 3])
>>> set(array_1d)
{1, 2, 3}
Bei einem 2-D-Array erhalten Sie jedoch diesen Fehler, da die verschachtelten Arrays selbst nicht hashbar sind:
>>> array_2d = np.array([[1,2,3], [1,2,3], [1,2,3]])
>>> array_2d
array([[1, 2, 3],
[1, 2, 3],
[1, 2, 3]])
>>> set(array_2d)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'numpy.ndarray'