我有一个非常大的 sparse csc_matrix x
。我想对它进行逐个元素的 exp() 运算。基本上,我想得到的结果与 numpy.exp(x.toarray())
相同。但是我无法这样做(我的内存无法将稀疏矩阵转换成数组)。有什么办法吗?提前感谢!
我有一个非常大的 sparse csc_matrix x
。我想对它进行逐个元素的 exp() 运算。基本上,我想得到的结果与 numpy.exp(x.toarray())
相同。但是我无法这样做(我的内存无法将稀疏矩阵转换成数组)。有什么办法吗?提前感谢!
x.expm1()
scipy/sparse/data.py
有一段代码 # Add the numpy unary ufuncs for which func(0) = 0 to _data_matrix.
。关键是能够访问 .data
属性,并使用 _with_data
方法创建一个新矩阵。我之前也不知道这一点。 - hpaulj如果你想改变非零元素,也许这个方法适合你:
x = some big sparse matrix
np.exp( x.data, out=x.data ) # ask np.exp() to store results in existing x.data
据推测较慢:
# above seems more efficient (no new memory alloc).
x.data = np.exp( x.data )
我一直在思考如何对每个非零数组元素进行逐元素的log2()运算。最终我做了以下操作:
np.log2( x.data, out=x.data )
通常情况下我不会去操作私有属性,但是在我查看的各种稀疏矩阵的属性文档中,.data 属性非常明显。
如果您只想针对非零元素进行操作:在某些表示中,包括 csr
和 csc
,data
属性是可写的。一些表示允许重复条目,请确保您正在处理“规范化”形式。
y = x.copy()
y.data = np.exp(y.data)