Python 稀疏矩阵的numpy.prod()的scipy等价物
我正在寻找与scipy提供的稀疏表示()一起使用的等价的。具体来说,我试着沿着一个轴计算乘积。我可以先转换为稠密(Python 稀疏矩阵的numpy.prod()的scipy等价物,python,numpy,scipy,Python,Numpy,Scipy,我正在寻找与scipy提供的稀疏表示()一起使用的等价的。具体来说,我试着沿着一个轴计算乘积。我可以先转换为稠密(M.todense().prod(axis=0)),但我正在寻找更有效的方法 对于沿每个列的prod缩减操作,即轴=0,对于所有非零的列,我们将仅具有非零输出。我们可以利用这个事实来定制一个推出的版本,就像这样- def sparse_prod_axis0(A): # Valid mask of row length that has all non-zeros along
M.todense().prod(axis=0)
),但我正在寻找更有效的方法 对于沿每个列的prod
缩减操作,即轴=0
,对于所有非零的列,我们将仅具有非零输出。我们可以利用这个事实来定制一个推出的版本,就像这样-
def sparse_prod_axis0(A):
# Valid mask of row length that has all non-zeros along each col
valid_mask = A.getnnz(axis=0)==A.shape[0] # Thanks to @hpaulj on this!
# Initialize o/p array of zeros
out = np.zeros(A.shape[1],dtype=A.dtype)
# Set valid positions with prod of each col from valid ones
out[valid_mask] = np.prod(A[:,valid_mask].A,axis=0)
return np.matrix(out)
样本运行-
In [92]: from scipy.sparse import csr_matrix
...: a = np.random.randint(0,4,(5,10))
...: A = csr_matrix(a)
...:
In [93]: (A.todense().prod(axis=0))
Out[93]: matrix([[ 0, 0, 6, 48, 0, 0, 0, 0, 72, 0]])
In [94]: sparse_prod_axis0(A)
Out[94]: matrix([[ 0, 0, 6, 48, 0, 0, 0, 0, 72, 0]])
我不认为有一个等价物。大多数稀疏矩阵只实现元素操作。大多数(如果不是所有的话)值将为0。整行或整列必须密集,非零。
csr\u matrix.getnnz(axis=None)
可能有用;位getmmz
使用bincount
:)@谢谢!现在好多了!谢谢我对它计时,你的函数比转换为稠密函数快15倍。