Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 稀疏矩阵的numpy.prod()的scipy等价物_Python_Numpy_Scipy - Fatal编程技术网

Python 稀疏矩阵的numpy.prod()的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

我正在寻找与scipy提供的稀疏表示()一起使用的等价的。具体来说,我试着沿着一个轴计算乘积。我可以先转换为稠密(
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倍。