python替代fortran';类型';记录
我有一些fortran代码要转换成python。所述代码广泛使用“类型”数据结构来描述具有包含多个变量的长标题以及子标题的数据文件,以及存储在五维数组中的实际数据本身;由标头中的其他变量定义的数组的可用维度。在fortran中,我使用一个包含文件来定义我使用的每个程序套件中的类型 在下面的示例中,我将该类型称为“序列”:python替代fortran';类型';记录,python,data-structures,types,fortran,records,Python,Data Structures,Types,Fortran,Records,我有一些fortran代码要转换成python。所述代码广泛使用“类型”数据结构来描述具有包含多个变量的长标题以及子标题的数据文件,以及存储在五维数组中的实际数据本身;由标头中的其他变量定义的数组的可用维度。在fortran中,我使用一个包含文件来定义我使用的每个程序套件中的类型 在下面的示例中,我将该类型称为“序列”: TYPE SEQUENCE INTEGER NHEADER ! Number of items recorded from file header CHAR
TYPE SEQUENCE
INTEGER NHEADER ! Number of items recorded from file header
CHARACTER*(256) FILE
CHARACTER*(8) UTC
CHARACTER*(10) UTDATE
CHARACTER*(24) OBJ_NAME
CHARACTER*(24) OBJ_CLASS
DOUBLE PRECISION MOD_TEMP
DOUBLE PRECISION MOD_FREQ
CHARACTER*(1) PMT
CHARACTER*(6) MOD
INTEGER FILNUM
CHARACTER*(24) FILTER
DOUBLE PRECISION MOD_AMP
INTEGER HT1
INTEGER GAIN1
INTEGER HT2
INTEGER GAIN2
DOUBLE PRECISION WP_DELTA
DOUBLE PRECISION WPA
DOUBLE PRECISION WPB
CHARACTER*(MAX_WP) WPSEQ
DOUBLE PRECISION ROTA
DOUBLE PRECISION ROTB
CHARACTER*(MAX_ROT) ROTSEQ
DOUBLE PRECISION TELESCOPE_PA
CHARACTER*(7) WAVEFORM
CHARACTER*(256) SKY_SUB
CHARACTER*(256) OS_SUB1
CHARACTER*(256) OS_SUB2
CHARACTER*(256) NOTES
INTEGER REPEATS
INTEGER WP_ROTATIONS
INTEGER ROTATIONS
INTEGER INTEGRATIONS
INTEGER CHANNELS
INTEGER POINTS
DOUBLE PRECISION ROT_POS(MAX_ROT)
DOUBLE PRECISION PRG_MOD_TEMP(MAX_REP,MAX_ROT,MAX_INT)
CHARACTER*(8) PRG_UTC(MAX_REP,MAX_ROT,MAX_INT)
DOUBLE PRECISION DAT(MAX_REP,MAX_ROT,MAX_INT,N_CH,MAX_PT)
DOUBLE PRECISION EXP_TIME
DOUBLE PRECISION INT_TIME
DOUBLE PRECISION TOTAL_SEQ_TIME
END TYPE
在您的情况下,这些文件表示仪器获得的数据,该仪器对每个数据块进行了大量配置。一些配置名义上是等效的,另一些配置测量的是系统的相反状态
如您所见,该结构中有许多不同的数据类型,时间当前存储为字符串,这并不理想。涉及时间的操作在fortran中是一件非常痛苦的事情,能够在python中更轻松地处理这一点是切换的动机之一
在一些程序中,我制作了多个序列的数组。在其他情况下,我需要按照序列.DAT()中的特定维度组合执行数学运算。作为fortran,这通常是通过大量循环和if语句来完成的
我对python还比较陌生,所以在重写大量代码之前,我需要弄清楚最好的方法是什么。或者一年后再做一次
起初我希望pandas会提供答案,但看起来你不能创建超过3维的面板,而且数据帧的大小必须相同。我真的不想从头开始创建自己的类,因为这似乎需要大量的工作来构建可能更容易通过另一种方式实现的功能。我应该使用记录吗?还是别的什么
你推荐什么?就简单性/易启动性和/或功能性而言,有哪些优势?命名非序列类型
序列
有点。。。奇怪甚至误导。这真的取决于你到底想做什么。你需要二进制兼容性吗?你会从用Fortran编写的文件中读取它吗?为什么不能创建一个具有完全相同字段的类呢?“涉及时间的操作在fortran中是一件非常痛苦的事情,能够在python中更轻松地处理这一点是切换的动机之一。”您是否尝试过使用一些库?也许它被命名为序列是因为数据块在文献中被称为序列。原始代码是用Fortran77编写的,虽然我想我可以用fortran更好地处理日期和时间,但这似乎很麻烦,而且这不是切换的唯一原因。我还想使用其他python包。命名非序列类型sequence
有点。。。奇怪甚至误导。这真的取决于你到底想做什么。你需要二进制兼容性吗?你会从用Fortran编写的文件中读取它吗?为什么不能创建一个具有完全相同字段的类呢?“涉及时间的操作在fortran中是一件非常痛苦的事情,能够在python中更轻松地处理这一点是切换的动机之一。”您是否尝试过使用一些库?也许它被命名为序列是因为数据块在文献中被称为序列。原始代码是用Fortran77编写的,虽然我想我可以用fortran更好地处理日期和时间,但这似乎很麻烦,而且这不是切换的唯一原因。我还想使用其他python包。