Mit*_*ril 2 python numpy matrix scipy
我正在尝试使机器学习库与 scipy 稀疏矩阵一起工作。
下面的代码是检测是否有y
1个以上的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)
稀疏矩阵以不同的方式存储它们的值,但通常有一个.data
包含非零值的属性。
set(y.data)
Run Code Online (Sandbox Code Playgroud)
可能就是你所需要的。这应该适用于coo
, csr
, csc
。对于其他人,您需要转换矩阵格式(例如y.tocoo
)。
如果这不起作用,请向我们提供有关矩阵格式和问题的更多详细信息。