首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用numpy导入Python中的nastran节点集

使用numpy导入Python中的nastran节点集
EN

Stack Overflow用户
提问于 2015-10-21 08:25:39
回答 2查看 1.4K关注 0票数 0

如果我想要将Nastran Deck导入Python,那么可以使用numpy一举实现。我该怎么做呢?我哪里出问题了?

我有一个只有网格的文件。网格都与Nastran的短翻译器(8个字符)等距。

代码语言:javascript
复制
$ 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命令就很好了。这是我的代码:

代码语言:javascript
复制
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个字符。以下是错误:

代码语言:javascript
复制
ValueError: invalid literal for float(): 58.50002-57.749923.05

我们很感激你的帮助。

请一些人制作一个nastran标签,大量的数据处理是在nastran中完成的,这需要智能编程。这会有帮助的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-21 08:55:46

dtype指定内存中二进制数据的布局。它没有定义文件中的文本格式。

您的数据文件有固定宽度的字段。也就是说,每个字段使用8个字符,并且没有特殊的分隔符字符来分隔字段。通过在numpy.genfromtxt参数中指定字段宽度,可以使用delimiter读取这样的文件。

下面是ipython会话中的一个示例。首先,这是您的示例文件。(我编辑了该文件,以确保在第二行和第三行的最后05之后有三个空格,但这是不必要的。)

代码语言:javascript
复制
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,而XYZ字段的类型为np.float64

代码语言:javascript
复制
In [16]: dt = np.dtype([('Grid', 'S8'), ('GN', np.int64), ('Prop', 'S8'), ('X', np.float64), ('Y', np.float64), ('Z', np.float64)])

使用genfromtxt读取文件,其中有六个固定宽度的字段,每个字段的长度为8:

代码语言:javascript
复制
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])
票数 2
EN

Stack Overflow用户

发布于 2017-08-27 01:01:37

也许pyNastran可以代替numpy??https://github.com/SteveDoyle2/pyNastran

此示例打印节点。

代码语言:javascript
复制
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.}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33254351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档