矢量化稀疏和石楠

2024-09-27 00:15:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试做空间导数,并且几乎设法从我的代码中取出所有的循环,但是当我试图在最后总结所有的东西时,我遇到了一个问题。在

我有一组N~=250k节点。我发现了具有i.size=j.size=~7.5M的节点对的索引i,j,它们位于一定的搜索距离内,最初来自np.triu_indices(n,1),并通过一系列布尔掩码来洗掉相互不影响的节点。现在我想总结一下其他节点对每个节点的影响。在

我现在有这个:

def sparseSum(a,i,j,n):
    return np.array([np.sum(a[np.logical_or(i==k,j==k)],axis=0) for k in range(n)])

这很慢。我想要的是矢量化的东西。如果我有神经病我可以做

^{pr2}$

但我在Abaqus实现中完成了这一切,它不包括scipy。有没有办法只做这个裸体游戏?在


Tags: 代码距离sizereturn节点defnp空间
2条回答

这里不是一个交钥匙的解决方案,而是一个添加稀疏矩阵列的解决方案。它本质上是计算和使用csc表示

def sparse_col_sums(i, j, a, N):
    order = np.lexsort(j, i)
    io, jo, ao = i[order], j[order], a[order]
    col_bnds = io.searchsorted(np.arange(N))
    return np.add.reduceat(ao, col_bnds)

方法1:这是一种利用^{}和{a2}-

K = np.arange(n)[:,None]
mask = (i == K) | (j == K)
out = np.dot(mask,a)

方法2:对于列数较少的情况,我们可以使用^{}对每列进行基于bin的求和,如下-

^{pr2}$

相关问题 更多 >

    热门问题