У меня есть набор из 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 ответ
Используя словарь, вы можете сохранить позиционную информацию, связанную с идентификатором частицы, используя масштабирование поиска 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 также может помочь.
Похожие вопросы
Связанные вопросы
Новые вопросы
python-3.x
По вопросам программирования Python, относящегося к версии языка 3+. Используйте более общий тег [python] для всех вопросов Python и добавляйте его только в том случае, если ваш вопрос зависит от версии. Используйте теги [python-2.x] для вопросов Python 2.