2 回答
TA贡献1773条经验 获得超3个赞
您正在查看的优化需要存储p不同的n x n矩阵。如果您确实想尝试一下,我可能会使用 scipy 的 C 扩展中稀疏矩阵中内置的所有功能。
import numpy as np
from scipy import sparse
arr = sparse.random(100,10000, format="csr", density=0.01)
xxt = arr @ arr.T
p_comps = [arr[:, i] @ arr.T[i, :] for i in range(arr.shape[1])]
def calc_weights(xxt, thetas, p_comps):
xxt = xxt.copy()
xxt.data = np.zeros(xxt.data.shape, dtype=xxt.dtype)
for i, t in enumerate(thetas):
xxt += (p_comps[i] * t)
return xxt
W = calc_weights(xxt, np.ones(10000), p_comps)
>>>(xxt.A == W.A).all()
True
这真的不太可能在 python 中很好地实现。在 C 语言中执行此操作可能会更幸运,或者使用对元素进行操作的嵌套循环编写一些东西,并且可以使用 numba 进行 JIT 编译。
TA贡献1802条经验 获得超10个赞
第一个简单的解决方案是注意输出矩阵是对称的:
n = X.shape[0]
intersection_dict = {}
for i in range(n):
for j in range(i,n): #note the edit here
indices = np.intersect1d(X[i].indices, X[j].indices)
intersection_dict[(i,j)] = indices
这将使您的计算量减少不到 2 倍
添加回答
举报