如果我想要将Nastran Deck导入Python,那么可以使用numpy一举实现。我该怎么做呢?我哪里出问题了?
我有一个只有网格的文件。网格都与Nastran的短翻译器(8个字符)等距。
$ MH Nodes
$2345678$2345678$2345678$2345678$2345678$2345678
GRID 25601 58.50002-57.749923.05
GRID 25602 58.81002-57.749923.05 如果我正确地理解了dtype命令,那么使用Numpy中的dtype命令就很好了。这是我的代码:
fileMH = "Gnodes.bdf"
dtyp = np.dtype([
("Grid",(np.void,8)),
("GN",(np.int,8)),
("Prop",(np.void,8)),
("X",(np.float,8)),
("Y",(np.float,8)),
("Z",(np.float,8)),
])
f = np.loadtxt(fileMH,dtyp,comments="$")我得到的错误是一个浮点错误,但是我期望dtype一次从字符串中提取8个字符。以下是错误:
ValueError: invalid literal for float(): 58.50002-57.749923.05我们很感激你的帮助。
请一些人制作一个nastran标签,大量的数据处理是在nastran中完成的,这需要智能编程。这会有帮助的。
发布于 2015-10-21 08:55:46
dtype指定内存中二进制数据的布局。它没有定义文件中的文本格式。
您的数据文件有固定宽度的字段。也就是说,每个字段使用8个字符,并且没有特殊的分隔符字符来分隔字段。通过在numpy.genfromtxt参数中指定字段宽度,可以使用delimiter读取这样的文件。
下面是ipython会话中的一个示例。首先,这是您的示例文件。(我编辑了该文件,以确保在第二行和第三行的最后05之后有三个空格,但这是不必要的。)
In [15]: !cat nastran_data.txt
$ MH Nodes
$2345678$2345678$2345678$2345678$2345678$2345678
GRID 25601 58.50002-57.749923.05
GRID 25602 58.81002-57.749923.05 下面是由genfromtxt创建的数组的数据类型。注意,GN字段的类型为np.int64,而X、Y和Z字段的类型为np.float64。
In [16]: dt = np.dtype([('Grid', 'S8'), ('GN', np.int64), ('Prop', 'S8'), ('X', np.float64), ('Y', np.float64), ('Z', np.float64)])使用genfromtxt读取文件,其中有六个固定宽度的字段,每个字段的长度为8:
In [18]: a = np.genfromtxt('nastran_data.txt', dtype=dt, delimiter=(8, 8, 8, 8, 8, 8), skip_header=2)
In [19]: a
Out[19]:
array([('GRID ', 25601, ' ', 58.50002, -57.7499, 23.05),
('GRID ', 25602, ' ', 58.81002, -57.7499, 23.05)],
dtype=[('Grid', 'S8'), ('GN', '<i8'), ('Prop', 'S8'), ('X', '<f8'), ('Y', '<f8'), ('Z', '<f8')])
In [20]: a['GN']
Out[20]: array([25601, 25602])
In [21]: a['X']
Out[21]: array([ 58.50002, 58.81002])发布于 2017-08-27 01:01:37
也许pyNastran可以代替numpy??https://github.com/SteveDoyle2/pyNastran。
此示例打印节点。
import pyNastran
from pyNastran.bdf.bdf import BDF
model = BDF()
model.read_bdf('inputdeck.bdf', xref=True)
model.nodes
{1: GRID 1 8. 3. 0.,
2: GRID 2 8. 9. 0.,
3: GRID 3 8. 11. 0.,
4: GRID 4 8. 13. 0.,
5: GRID 5 -8. 3. 0.,
6: GRID 6 -8. 9. 0.,
7: GRID 7 -8. 11. 0.,
8: GRID 8 -8. 13. 0.,
9: GRID 9 2. 5. 0.}https://stackoverflow.com/questions/33254351
复制相似问题