У меня есть набор из 100 файлов данных, содержащих информацию о частицах (ID, скорость, положение и т. Д.). Мне нужно выделить 10000 конкретных частиц, у каждой из которых есть определенные идентификационные номера. Я делаю это следующим образом

for i in range(n_files+1):
    data= load_data_file(i, datatype="double_precision")
    for j in chosen_id_arr:
        my_index= np.where((particleID_in_data)==j)
        identity.append(ID[my_index])
        x.append(x_component[my_index])
        y.append(y_component[my_index])
        z.append(z_component[my_index])


Список selected_id_array содержит все такие идентификаторы. Файлы данных структурированы по индексу списка.

По какой-то причине этот фрагмент работает очень медленно, я искал более быструю и эффективную альтернативу для этого. Заранее большое спасибо. :)

1
noobprogrammer 18 Июн 2020 в 18:46

1 ответ

Лучший ответ

Используя словарь, вы можете сохранить позиционную информацию, связанную с идентификатором частицы, используя масштабирование поиска O (1) для словарей:

# What the data in a single file would look like:
data = {1:[0.5,0.1,1.], 4:[0.4,-0.2,0.1], ...}
# A lookup becomes very simple syntactically:
for ID in chosen_id_arr:
    x, y, z = data[ID]
    # Here you can process the obtained x,y,z.

Это намного быстрее, чем поиск numpy. Что касается обработки данных о местоположении в цикле, вы могли бы подумать о том, чтобы иметь отдельные списки положений для различных идентификаторов частиц, но я думаю, что это выходит за рамки вопроса. Пакет pandas также может помочь.

0
David Wierichs 21 Июн 2020 в 08:24