在《机器学习实战》的第9章树回归中的源代码错误:
既是:
TypeError: unhashable type: 'matrix'
matrix类型不能被hash
解决过程:
In [22]: testMat
Out[22]:
matrix([[ 1., 0., 0., 0.],
[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 0., 0., 1.]])
In [23]: testMat[:,1]
Out[23]:
matrix([[ 0.],
[ 1.],
[ 0.],
[ 0.]])
In [24]: set(testMat[:,1])
Traceback (most recent call last):
File "<ipython-input-24-34e910607d48>", line 1, in <module>
set(testMat[:,1])
TypeError: unhashable type: 'matrix'
In [25]: testMat[:,1].T.tolist()
Out[25]: [[0.0, 1.0, 0.0, 0.0]]
In [26]: testMat[:,1].T.A.tolist()
Out[26]: [[0.0, 1.0, 0.0, 0.0]]
In [27]: testMat[:,1].T.A.tolist()[0]
Out[27]: [0.0, 1.0, 0.0, 0.0]
In [28]: testMat[:,1].T.tolist()[0]
Out[28]: [0.0, 1.0, 0.0, 0.0]
In [29]: set(testMat[:,1].T.tolist()[0])
Out[29]: {0.0, 1.0}
即必须转换为行向量,然后再转换为列表,最后集合处理得到所有不同的元素值。
我这里用的是windows下的python 2.7 版本,其它的系统和版本暂不清楚。