我有一个 2 列数组混合类型数组,我需要将其读入并重塑为数据立方体。我已经完成了大部分工作,但由于某种原因,numpy.loadtxt 和 np.genfromtxt 都删除了元组字符串部分第 8 个字符之后的所有内容。我有 8 个参数值对的 25 个块,对应于不同质量和金属丰度的恒星。例如,Teff \t\t 5.2739E+3
(字符串和浮点数之间有 2 个制表符)可以很好地转换为键值对,但MASS/MSUN \t\t 0.800
会转换为'MASS/MSU':0.800
而不是 'MASS/MSUN':0.800
像我预期的那样。同样,LOG(L/LSUN) \t\t 0.0522
变成'LOG(L/LS': 0.0522
而不是'LOG(L/LSUN)': 0.0522
为什么字符串中的最后一个字符会脱落?我尝试将分隔符设置为仅制表符,仅制表符和换行符(似乎不喜欢那样),注释掉块之间的行等。似乎无论我做什么,每个字符串的字符限制都被卡住了在 8. 必须有一个我需要声明的字符串子类型。我做了一个解决方法,它只是困扰我。
这是我的代码(我正在使用 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)