我正在尝试使用scipy稀疏矩阵使机器学习lib工作。
下面的代码是检测y
中是否有多于1个类。因为在进行分类时只有1个类是没有意义的。
import numpy as np
y = np.array([0,1,0,1,0,1])
uniques = set(y) # get {0, 1}
if len(uniques) == 1:
raise RuntimeError("Only one class detected, aborting...")
但如果set(y)
是scipy稀疏矩阵,则y
无效。
如果y
是scipy稀疏矩阵,如何有效地获得所有唯一值?
PS:我知道set(y.todense())
可能有效,但内存成本太高
更新
>>> y = sp.csr_matrix(np.array([0,1,0,1,0,1]))
>>> set(y.data)
{1}
>>> y.data
array([1, 1, 1])
答案 0 :(得分:3)
稀疏矩阵以不同的方式存储它们的值,但通常有.data
属性包含非零值。
set(y.data)
可能就是您所需要的一切。这适用于coo
,csr
,csc
。对于其他人,您需要转换矩阵格式(例如y.tocoo
)。
如果这不起作用,请向我们提供有关矩阵格式和问题的更多详细信息。