我有一个2列数组混合类型数组,我需要读入该数组并将其重塑为数据立方体。我大部分时间都在工作,但出于某种原因两者兼而有之加载数.txt以及np.genfromtxt删除元组字符串部分第8个字符之后的所有内容。我有25个由8个参数值对组成的块,对应于质量和金属度不同的恒星。例如,Teff\t\t 5.2739E+3
(字符串和float之间有2个制表符)可以很好地转换为键值对,但是MASS/MSUN \t\t 0.800
转换为'MASS/MSU':0.800
,而不是我预期的{LOG(L/LSUN) \t\t 0.0522
变成{
这是我的代码(我使用的是Spyder GUI,顺便说一句):
>>>f=np.genfromtxt("zamsdata.txt",dtype=(str,float))
>>>zcube = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))
>>>infotups=[]
>>>for row in f:
>>> if 'MASS' in row[0]:
>>> mass=str(row[1])
>>> continue #rows are in repeating order of MASS, X, Y, Pc, Tc, R, L, Te, LOG(Te) & LOG(L/LSUN)
>>> if 'X' in row[0]:
>>> hydfrac=str(row[1])
>>> continue
>>> else:
>>> infotups=infotups+[[hydfrac,mass,str(row[0]),row[1]]]
>>>
>>>for l,m,a,o in infotups:
>>> zcube[l][m][a].append(o)
当字段的数据类型被指定为
str
时,genfromtxt
分配给字段的默认大小是8个字符。如果知道最大字符数是12,那么可以使用dtype=['S12', float]
。(请注意,我使用的是一个列表,而不是元组。)您还可以使用dtype=None
,它告诉genfromtxt
从文件中找到的每个字段的数据类型。在相关问题 更多 >
编程相关推荐