ใน python TypeError: unhashable type: 'numpy.ndarray'
Aug 19 2020
ฉันพยายามค้นหาการเรียกคืน แต่เกิดข้อผิดพลาดประเภท
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)))
รหัสนี้แสดงข้อผิดพลาด: อันที่จริงฉันพยายามค้นหาการเรียกคืนสำหรับรายละเอียดข้อผิดพลาดการจำแนกประเภทหลายป้ายตามด้านล่าง
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'
คำตอบ
1 CarolynConway Aug 19 2020 at 20:14
y_test
ไม่สามารถแปลงอาร์เรย์ numpy ของคุณเป็นชุดได้ (ในบรรทัดที่ 11) เนื่องจากอาร์เรย์เป็น 2 มิติ
เพื่อให้สามารถแปลงเป็นชุดได้รายการต่างๆจะต้องมีการล้างทำความสะอาดได้ทั้งหมด สำหรับอาร์เรย์ตัวเลข 1 มิติก็ใช้ได้เพราะตัวเลขสามารถแฮชได้:
>>> array_1d = np.array([1, 2, 3])
>>> array_1d
array([1, 2, 3])
>>> set(array_1d)
{1, 2, 3}
แต่สำหรับอาร์เรย์ 2 มิติคุณจะได้รับข้อผิดพลาดนี้เนื่องจากอาร์เรย์ที่ซ้อนกันไม่สามารถแฮชได้เอง:
>>> 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'