2015-09-24 3 views
3

Я пытаюсь преобразовать информацию о массиве в список наиболее эффективным (что означает самый быстрый) способ.Что такое эффективный способ преобразования массивов/списков в словари?

У меня есть список, который я называю node_map, который я хочу быть ключом для словаря, а затем 3D-массив node_coordinates (node_coords_tmp), который я хочу связать с node_map.

Node_map выглядит следующим образом:

[1,2,3,4,5] 

Node_coords сообщается назад при печати первоначально как:

(<exodus.c_double_Array_8352100 object at 0x2c2d8c0>, <exodus.c_double_Array_8352100 object at 0x2c2d5f0>, <exodus.c_double_Array_8352100 object at 0x2c2d560>) 

Изначально я заполнил словарь как это:

for ct,i in enumerate(node_map): 
     node_coords[i] = [node_coords_tmp[0][ct],node_coords_tmp[1][ct],node_coords_tmp[2][ct]] 

Это сделал то, что я но был медленнее, чем хотелось бы для размера массивов, с которыми я имею дело. Есть ли лучший способ сделать это с помощью numpy или другой формы? Благодарю.

+0

Как бы вы представить себе заселение словарь меньше, чем O (п)? Вы должны перебирать каждый элемент. – dimo414

+0

Это будет O (n), но коэффициент может быть значительным в зависимости от конкретного n, с которым работает OP .. –

+0

@dimo Не все алгоритмы с той же логарифмической оценкой выполняются точно в одно и то же время. –

ответ

5

Попробуйте Dict понимание ..

+0

Чад, спасибо. Я должен был перейти к номенклатуре python2.6 (будет ли это когда-нибудь штрафом, как вы думаете, используя 2,6 вместо 2,7 стиля понимания dict?). Это было примерно на 5% быстрее, это выигрыш, но мне также может понадобиться перейти к некоторым параллельным вещам. Я значительно ускорил некоторые дополнения по спискам, используя np.add вместо сумм по усмотрению zip list и надеялся, что я смогу найти что-то подобное здесь. Я могу перейти к новому подходу или перепрыгнуть через MPI. Еще раз спасибо. – jackd

+0

он должен быть примерно таким же, как с использованием '' 'dict ((i, (...)) для ct, i в перечислении (...))' '' –

Смежные вопросы