Warum ist der Aufbau einer spärlichen Matrix langsamer als der Aufbau einer dichten (vollständigen) Matrix?
Posted: 20 Jan 2025, 18:43
Ich habe zwei Funktionen (i) getKglobal und (ii) getKglobal_Sp. Allerdings ist die Zeit für die Sparse-Funktion etwa fünfmal langsamer als für die Fullmatrix-Formulierung. Ich verstehe, dass es schwierig sein kann, Leistung aus Sparse herauszuholen. Aber 5x langsam scheint schade zu sein. Was ist der „große und offensichtliche“ Fehler, den ich übersehe?
Code: Select all
def getKglobal(geom,mat,nel,tdof):
k_global = np.zeros((tdof, tdof))
for i in range(0,nel):
dof_idx = geom.dof_idx[i]
coord = geom.coord[i]
kloc=getkelement(coord,mat)
k_global[np.ix_(dof_idx, dof_idx)]+=kloc
return k_global
def getKglobal_Sp(geom,mat,nel,tdof):
from scipy.sparse import lil_matrix
k_global = lil_matrix((tdof, tdof))
for i in range(0,nel):
dof_idx = geom.dof_idx[i]
coord = geom.coord[i]
kloc=getkelement(coord,mat)
for a, global_a in enumerate(dof_idx):
for b, global_b in enumerate(dof_idx):
k_global[global_a, global_b] += kloc[a, b]
return k_global.tocsr()