TypeError:不可用类型:'matrix'

时间:2017-06-21 06:47:49

标签: python numpy

我为下面的错误而烦恼。 我从另一本书中看到了这段代码,但它不起作用。 我该如何解决? 提前谢谢!

import numpy as np
a = [1, 2, 3, 2]
Ma = np.mat(a)
Sa2 = set(Ma)      #error

3 个答案:

答案 0 :(得分:3)

您可以使用以下内容将矩阵展平为ndarray。

import numpy as np
a = [1, 2, 3, 2]
Ma = np.mat(a)
Sa2 = set(np.asarray(Ma).ravel())
print (Sa2)
>>> '{1, 2, 3}'

答案 1 :(得分:1)

您可以使用Ma.A1将矩阵转换为1d数组,该数组显示为简单列表。在元组中包含一个 hashable 的对象。

>>> import numpy as np
>>> a = [1, 2, 3, 2]
>>> Ma = np.mat(a)
>>> Sa2 = set(Ma)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'matrix'
>>> set(Ma.A1)
set([1, 2, 3])

另一种方式:

>>> set(Ma.flat)
set([1, 2, 3])

查看Set of matrices

的更多详情

Constructing a python set from a numpy matrix

答案 2 :(得分:0)

set尝试迭代其输入,实际上将其视为列表:

In [61]: list(np.mat([1,2,3,4]))
Out[61]: [matrix([[1, 2, 3, 4]])]     # a 1 item list
In [62]: list(np.mat([1,2,3,4]).A1)
Out[62]: [1, 2, 3, 4]

np.mat将其输入转换为(1,4)数组,并且任何迭代都会产生相同的结果。并且set无法对整个矩阵对象进行哈希处理。

你想要一个set,矩阵中的4个数字?或者一排&#39;矩阵? set不适用于嵌套列表或包含数组或矩阵的列表。该集合的元素必须是“可散列的”,不可变的。数字和元组工作。列表和词典没有。