Исключение дубликатов из списка при суммировании по недублированной переменной - PullRequest
0 голосов
/ 06 июня 2019

У меня есть текстовый файл телескопа с тремя столбцами, 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()

1 Ответ

0 голосов
/ 06 июня 2019

Вы можете использовать словарь с кортежем (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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...