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

Mit*_*ril 2 python numpy matrix scipy

我正在尝试使机器学习库与 scipy 稀疏矩阵一起工作。

下面的代码是检测是否有y1个以上的class。因为在做分类的时候如果只有1个class是没有意义的。

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...")
Run Code Online (Sandbox Code Playgroud)

set(y)如果y是 scipy 稀疏矩阵,则不起作用。

如果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])
Run Code Online (Sandbox Code Playgroud)

hpa*_*ulj 5

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

set(y.data)
Run Code Online (Sandbox Code Playgroud)

可能就是你所需要的。这应该适用于coo, csr, csc。对于其他人,您需要转换矩阵格式(例如y.tocoo)。

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