我有一个包含RA,DEC和TIME三列的望远镜的文本文件。 RA和DEC是天空坐标,而TIME是在该坐标处的观测时间。虽然在许多条目中重复了RA和DEC,但每个条目中的时间却没有,即可以先指向(RA,DEC)=(120,30)的前2小时,然后再指向4,最后再指向1。想法是使用python编写另一个文本文件,其中每对坐标仅出现一次,时间是该坐标中所有时间的总和。当然,有些坐标只能观察一次,因此不会重复。
我做了一些尝试,此刻我设法编写了相同的输入文件,但是每个坐标的第一个输入始终是好的结果。问题是,如果重复一对坐标(例如5次),则文本文件将写入该坐标5次,这是第一个坐标中的时间之和,而我不知道的其余时间,但是它们不应该在那里
import numpy as np
file_all=open('input_file.txt',"r")
data_all = np.loadtxt(input_file,unpack=True)
time_all = data_all[0]
ra_all = data_all[1]
dec_all = data_all[2]
file_new=open('output_file.txt',"w")
file_new.write('#Time RA Dec\n')
time_new = np.zeros(len(ra_all))
ra_new = np.zeros(len(ra_all))
dec_new = np.zeros(len(ra_all))
for i in range(len(ra_all)):
time_new[i]=time_all[i]
for k in range(len(ra_all)):
if ((ra_all[i]==ra_all[k]) and i!=k):
cont = 0
if i<=k:
time_new[i]=time_new[i]+time_all[k]
ra_new[i] = ra_all[i]
dec_new[i] = dec_all[i]
elif ((ra_all[i]!=ra_all[k]) and i!=k):
time_new[i]=time_all[i]
ra_new[i] = ra_all[i]
dec_new[i] = dec_all[i]
if ra_new[i]!=0:
t = '%.3f %.5f %.5f\n' % (time_new[i], ra_new[i], dec_new[i])
file_new.write(t)
file_new.close()
答案 0 :(得分:0)
您可以使用以(RA,DEC)元组为键的字典来实现此目的。
my_dict = dict()
for i in range(len(data_all)):
key = (ra_all[i], dec_all[i])
# get() would return the value of the key if it exists, and 0 otherwise
value = my_dict.get(key, 0)
value += time_all[i]
my_dict[key] = value
for (ra, dec), time in my_dict.items():
t = '%.3f %.5f %.5f\n' % (time, ra, dec)
file_new.write(t)