が、私はそう、これらのファイルは非常に大きな成長することができますラ読む形式のデータ(GMSH形式をメッシュ)読むとき
àメッシュ表現のために使用される異なるフォーマット間の変換a little Python packageを維持それらをPythonで効率よく実行することが重要です。
最もよく使用されるフォーマットの1つはmshからGmshです。残念なことに、そのデータレイアウトはおそらく最高ではありません。例ファイル:$Nodes
について
$MeshFormat
2.2 0 8
$EndMeshFormat
$Nodes
8
1 -0.5 -0.5 -0.5
2 0.5 -0.5 -0.5
3 -0.5 0.5 -0.5
4 0.5 0.5 -0.5
5 -0.5 -0.5 0.5
6 0.5 -0.5 0.5
7 -0.5 0.5 0.5
8 0.5 0.5 0.5
$EndNodes
$Elements
2
1 4 2 1 11 1 2 3 5
2 4 2 1 11 2 5 6 8
$EndElements
:
最初の数(
8
)が従うべきノードの数です。各ノード行で、最初の番号がインデックス(実際形式の静止部分によって必要とされない、うーん)、次いで3つの空間座標に従ってです。
これまでのところ、
for
ループでは、islice
よりも優れたものはありませんでしたが、かなり遅いです。$Elements
について
# The first line is the number of nodes
line = next(islice(f, 1))
num_nodes = int(line)
#
points = numpy.empty((num_nodes, 3))
for k, line in enumerate(islice(f, num_nodes)):
points[k, :] = numpy.array(line.split(), dtype=float)[1:]
line = next(islice(f, 1))
assert line.strip() == '$EndNodes'
:
最初の数(
2
)が従うべき要素の数です。各要素行において、最初の数はインデックスで、次いで要素タイプ(
4
が四面体のためのものである)のための列挙に続きます。次に、この要素のの整数タグの数に従います(それぞれ2
、ここでは1
および11
)。要素タイプに対応して、この行の最後のいくつかのエントリは、要素を形成する$Node
インデックスに対応します。四面体の場合、最後の4つのエントリです。タグの数はエレメントタイプとノードインデックスの数と同じように、エレメントごとに異なることがあるので(ラインごとに異なる)、各ラインは異なる数の整数を有することができる。
$Nodes
と$Elements
の両方について
、すぐにこのデータを読み取るための任意のヘルプは高く評価されます。ここで