前面说过,Mathematica已经不再是简单的计算工具(http://blog.sciencenet.cn
/home.php?mod=space&uid=117333&do=blog&id=637954),其知识库和三维图形显示功能以及精确的计算都十分吸引人。
之前我们大多用IDL(或者CLASS之类的软件)处理分子云数据,由于大多数研究人员都使用这些工具,所以碰到问题有人可以问,而且已经积累了很多方便的专用工具。但是这些工具的三维显示都不尽如人意,真实感比较差,看起来很费劲。我一直在考虑是否可以用Mathematica这样的工具处理数据,但是由于用这种工具处理数据的人不多,碰到问题可能没人问,所以一直对此有顾虑。Wolfram北京大会之后,我觉得无论如何得试一试用
Mathematica处理数据,因为三维图形显示对于目前的研究已经变得很重要了。
数据处理的第一步是读数据,分子云数据大多是FITS格式的。之前知道Mathematica可以读入FITS文件,但是我的感觉是,似乎只对二维FITS文件有效。上网查,很多人也说似乎对三维FITS文件有问题,这导致我有些畏手畏脚。
昨天事少,决定不管网上的评论,自己试一试。其实用Mathematica读数据文件是比较方便的,各种格式都用一个函数,Import,不像IDL那样对不同的格式用不同的函数。直接读入一个三维FITS文件
a=Import["xxx.fits"]
并没有像网上说的那样出错,只不过得到不是数据,而是一系列图像。上网搜了一下,发现可以加一个选项得到原始数据
a=Import["xxx.fits","RawData"]
经过测试发现,a是一个三维数组,但是和用IDL读出的数组有些不同,如果IDL读出的数组的三维分布是x,y,z,那么Mathematica读出的数组的三维是z,y,x。并且,Mathematica数组的指标是从1开始的,不像IDL那样从0开始。
于是从FITS文件读数据的问题基本解决了。但是FITS文件还有另外一个重要的部分——头文件,这也是需要读出来的。网上搜了一圈,都是在问怎么读头文件的。其实读出头文件本身并不困难,只要把上面Import中第二个参数改为“Metadata”就可以了。
header=Import["xxx.fits","Metadata"]
但是这样得出的是一个非常复杂的列表,里面有各种单词,箭头,括号等。不过Mathematica的好处在于,数组、列表什么的其实都是同一种数据结构,所以可以自己方便地进行尝试。尝试
header[[1]]
输出的是
SIMPLE->{True,}
也就是头文件的第一项(行)。我希望得到的是NAXIS3的值,NAXIS3在第6行,尝试
header[[6]]
输出的是
NAXIS3->{228,}
但是我实际想得到的是228这个数,再尝试一下
header[[6]][[1]]
得到的是
NAXIS3
尝试
header[[6]][[2]]得到的是
{228,}
再尝试
header[[6]][[2]][[1]]
就得到
228了。这样就解决了读FITS头文件的问题。当然,其实还需要研究一下怎么用关键词直接读出数值,而不用数关键词所在的行数。
https://blog.sciencenet.cn/blog-117333-641804.html
上一篇:
胡思乱想(六)能源是当今社会的基石下一篇:
Mathematica处理分子云数据的可能性(二)确定列表元素位置