我保持a little Python package是用於網格表示點菜讀格式的數據(GMSH網格格式)
這些文件可以增長相當大的不同格式之間進行轉換,所以讀取時他們與Python一起高效地執行它很重要。
最常用的格式之一是msh從Gmsh。不幸的是,它的數據佈局可能不是最好的。一個例子的文件:
$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
對於
$Nodes
:第一個數字(
8
)是節點遵循的數目。在每個節點線,所述第一數量是索引(實際上不是由格式的靜止部分需要,啊),然後按照三個空間座標。
到目前爲止,在
for
循環中我還沒有拿出比islice
更好的東西,這個循環非常慢。
# 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'
對於
$Elements
:第一個數字(
2
)是元素遵循的數量。在各元件列中,第一個數字是索引,然後遵循爲元素類型(
4
爲四面體)的枚舉。然後,針對該元素(在此分別爲2
,即1
和11
)的個數的整數標記。對應於元素類型,此行中的最後幾個條目對應於$Node
索引,其形成元素 - 在四面體的情況下,最後四個條目。由於標籤的數量可以隨着元素的不同而不同(即線到線),就像元素類型和節點索引的數量一樣,每一行可以有不同數量的整數。
對於$Nodes
和$Elements
,對於快速閱讀此數據的任何幫助表示讚賞。