我为下面的错误而烦恼。 我从另一本书中看到了这段代码,但它不起作用。 我该如何解决? 提前谢谢!
import numpy as np
a = [1, 2, 3, 2]
Ma = np.mat(a)
Sa2 = set(Ma) #error
答案 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])
的更多详情
答案 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
不适用于嵌套列表或包含数组或矩阵的列表。该集合的元素必须是“可散列的”,不可变的。数字和元组工作。列表和词典没有。