稀疏矩阵加法生成“ValueError:用序列设置数组元素。”

2024-09-28 22:21:56 发布

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

有问题的线路是:

# Make efficient matrix that can be built
K = sparse.lil_matrix((N, N))

# Calculate K matrix (<i|pHp|j> in the LGL-nodes basis)
for i in range(Ne):
    idx_s, idx_e = i*(Np-1), i*(Np-1)+Np
    print(shape(K[idx_s:idx_e, idx_s:idx_e]))
    print(shape(dmat.T.dot(sparse.spdiags(w*peq[idx_s:idx_e], 0, Np, Np)).dot(dmat)))
    K[idx_s:idx_e, idx_s:idx_e] += dmat.T.dot(sparse.spdiags(w*peq[idx_s:idx_e], 0, Np, Np)).dot(dmat)

但是,目前,纽比正在接受这个错误

^{pr2}$

这有点神秘,因为错误似乎发生在Numpy库的某个地方,而不是在我的代码中。但我对numpy本身不太熟悉,所以可能是我间接导致了这个错误。在

两个切片的形状相同,所以这似乎不是真正的错误。在


Tags: inmake错误npmatrixdot线路sparse
1条回答
网友
1楼 · 发布于 2024-09-28 22:21:56

问题是

(dmat.T.dot(sparse.spdiags(w*peq[idx_s:idx_e], 0, Np, Np)).dot(dmat)

不是一个简单的数组。它具有正确的形状,但元素是稀疏矩阵(错误消息中的“序列”)。在

将内部稀疏矩阵转化为密集数组应该可以解决以下问题:

^{pr2}$

np.dot方法不知道稀疏矩阵,至少在您的版本numpy(1.8?),所以它将其视为序列。较新版本具有“稀疏”意识。在

另一个解决方案是使用稀疏矩阵乘积(dot或{})。在

sparse.spdiags(...).dot(dmat etc)

我不得不四处寻找N,Np,Ns, dmat,peq的合理值。你真该给我们一些小样品。它使测试想法变得更容易。在

相关问题 更多 >