机器学习实战:TypeError: unhashable type: 'matrix'

在《机器学习实战》的第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 版本,其它的系统和版本暂不清楚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值