所以我尝试使用以下内容用numpy读取以下文件:
import numpy as np
recordtype = np.dtype([('name', 'S24'),
('ra', [(np.int32,np.int32,np.float32)]),
('dec', [(np.int32,np.int32,np.float32)]),
('z',np.float32), ('rmag',np.float32),('rmag_error',np.float32),
('gmag',np.float32),('gmag_error',np.float32)])
qData = numpy.loadtxt("SDSS_quasar_cat5(1)", skiprows=6)
以下是数据文件的示例:
Results from heasarc_sdssquasar: Sloan Digital Sky Survey Quasar Catalog (10th Data Release: DR10Q)
Coordinate system: Equatorial
|name |ra |dec |vi_redshift|rmag |rmag_error |gmag |gmag_error |
|SDSS J163313.26+352050.7|16 33 13.265|+35 20 50.77| 2.0000|2.480190e+01|3.865410e+00|2.511420e+01|9.026890e-01|
|SDSS J164135.36+372726.9|16 41 35.362|+37 27 26.96| 2.0000|2.279110e+01|1.722010e-01|2.203690e+01|7.126500e-02|
|SDSS J160420.86+275634.5|16 04 20.869|+27 56 34.52| 2.0010|2.008330e+01|2.592250e-02|2.048210e+01|2.699570e-02|
|SDSS J163948.06+331030.2|16 39 48.069|+33 10 30.27| 2.0010|1.945350e+01|1.478850e-02|1.971600e+01|1.617890e-02|
|SDSS J162006.83+395403.8|16 20 06.834|+39 54 03.83| 2.0020|1.937250e+01|2.033600e-02|1.942160e+01|2.408500e-02|
我似乎无法过去定义dtype。我是python的新手,并寻找示例,但我必须有一些错误。有什么建议?
THX!
答案 0 :(得分:2)
以下是一个例子。
import numpy as np
recordtype = np.dtype([('name', 'S24'),
('ra', np.float32),
('dec', np.float32),
('z',np.float32),
('rmag',np.float32),
('rmag_error',np.float32),
('gmag',np.float32),
('gmag_error',np.float32)])
def ratodeg(string):
hh, mm, ss = string.split()
return (int(hh) * 15) + (int(mm) * 0.25) + (float(ss) * 0.0042)
def dectodeg(string):
return
qData = np.loadtxt("sample",
skiprows=1,
dtype=recordtype,
delimiter = '|',
usecols = (1, 2, 3, 4, 5, 6, 7, 8),
converters = {1:str,
2:ratodeg,
3:dectodeg})
请注意loadtxt
调用中的一些内容:
dtype
指定正确的一个。否则NumPy会假设你想要一个浮点数数组delimiter
告诉loadtxt
如何打破列usecolumns
指定要使用的内容。列0
和9
是第一个|之前的空白在最后一个之后converters
。它为每个指定的列分配转换器函数。仅涉及第1-3列。默认转换器为float(...)
我将dectodeg
留空了,因为我无法记住如何进行转化:P(我甚至不确定ratodeg
是否正常。 。),所以现在dec
每行nan
。