我有一个n x n
矩阵W
,一个n
维向量U
和一个标量p > 1
。我想计算W * (np.abs(U[:,np.newaxis] - U)**p)
,其中*
,**
和abs
是按元素方式理解的(如在numpy中)。
现在的问题是U[:,np.newaxis] - U
不适合内存,但是,W
是一个稀疏矩阵(scipy.sparse
),所以我实际上不必计算U[:,np.newaxis] - U
的所有元素,而只需要计算那些W
不为零的元素。
如何才能在计算时间和内存方面最有效地计算W * (np.abs(U[:,np.newaxis] - U)**p)
,理想情况下只进行稀疏运算,而不需要单步执行numpy
?
2条答案
按热度按时间camsedfj1#
为了利用稀疏性,你可以这样应用分配定律:
将导致
注意,只有当
W
的项不为负时,这才有意义。mwkjh3gx2#
我想出来了,我们可以使用
W.nonzero()
来执行所需的计算假设
W
是一个csc_matrix
: