从稀疏矩阵中获取所有唯一值[python / scipy]

时间:2016-01-21 03:02:16

标签: python numpy matrix scipy

我正在尝试使用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])

1 个答案:

答案 0 :(得分:3)

稀疏矩阵以不同的方式存储它们的值,但通常有.data属性包含非零值。

set(y.data)

可能就是您所需要的一切。这适用于coocsrcsc。对于其他人,您需要转换矩阵格式(例如y.tocoo)。

如果这不起作用,请向我们提供有关矩阵格式和问题的更多详细信息。