私は現在、小さな有限要素シミュレーションを実装しています。 Python/Numpyを使用して、グローバル剛性行列を作成する効率的な方法を探しています。疎(剛性)行列の実行者作成
1)小さな要素剛性行列から疎行列を作成するには、coo_matrix()
を使用する必要があります。ただし、既存のcoo_matrix
を拡張することはできますか、またはi、j、vの最終リストから作成する必要がありますか?
2)現在、私は、リスト内包表記を使用して小さな要素剛性行列からiとjリストを作成し、それらを連結しています。これらのリストを作成するより良い方法はありますか?
3)データベクトルの作成:簡単な拡張の可能性のためにnumpyベクトルよりもPythonリストが優先されますか?
4)もちろん私は任意のアドバイスのために開いています:)。ありがとうございました!ここで
は私が意図するものを明確にするために、グローバルアセンブリを行うには、私の現在の計画の小さな例です。
この記事でimport numpy as np
from scipy.sparse import coo_matrix
#2 nodes, 3 dof per node
locations = [0, 6]
nNodes = 2
dof =3
totSize = nNodes * dof
Ke = np.array([[1,1,1, 2,2,2],
[1,1,1, 2,2,2],
[1,1,1, 2,2,2],
[2,2,2, 3,3,3],
[2,2,2, 3,3,3],
[2,2,2, 3,3,3]])
I = []
J = []
#generate rowwise i and j lists:
i = [ idx + u for i in range(totSize) for idx in locations for u in range(dof) ]
j = [ idx + u for idx in locations for u in range(dof) for i in range(totSize) ]
I += i
J += J
Data = Ke.flatten()
cMatrix = coo_matrix((Data, (i,j)),)
こと。 – Divakar
@Divakar huh?あなたはリストの理解の中で「私」を意味しますか? Python 3では、理解は漏れスコープを持っていません... –
@ juanpa.arrivillagaああ、私は参照してください。うん、私はpython2.7で、その段階で 'i'に上書きしていました。 – Divakar