我使用的是python3.6和numpy。在
从hdf5文件中,我读取了一个2D数组的表列。在
数组的每一行保存有限元节点的ID。在
该表的结构使得它在同一个表中同时包含低阶和高阶元素(这很糟糕,但不是我可以更改的自由度)
所以数组看起来像这样(除了它可能有数百万行)
[[1,2,3,4,0,0,0,0], #<- 4 Node quad data packed with zeros
[3,4,5,6,0,0,0,0],
[7,8,9,10,11,12,13,14], #<- 8 node quad in the same table as 4 node quad
[15,16,17,18,19,20,21,22]]
我需要将这些信息分成两个独立的数组-一个用于4节点,一个用于8节点行。在
^{pr2}$现在我在2D数组上迭代,检查每行中第5个值的值,并创建两个索引数组——一个标识4个节点行,另一个标识8节点行。在
for element in elements:
if element[5] == 0:
tet4indices.append(index)
else:
tet10indices.append(index)
index+=1
然后我使用索引数组切片来获得这两个数组
tet4s=elements[tet4indices, 0:5]
tet10s=elements[tet10indices,0:10]
上面的方法可行,但看起来有点难看。在
如果有人有更好的解决方案,我会很高兴听到。。。。。在
提前谢谢你
道格
这段代码足够通用,可以处理您的用例。i、 即使你的行被弄混了。下面给出了两种情况的示例。在
一个按顺序排列行的示例:
行混合的示例:
^{pr2}$这对我有用:
在数组中,很容易找到第5个元素为0或不是0的行:
或者使用布尔掩码
^{pr2}$从某种意义上说,你很幸运拥有这个清晰的
0
标记。一些有限元代码重复节点数以减少节点数,例如[1,2,3,3]对于4节点系统中的3节点单元。但在这些情况下,其余的数学工作正常,即使你将两个节点合并为一个。在相关问题 更多 >
编程相关推荐