0

У меня есть «Ball», с некоторыми свойствами типа «x», «y» и «z», которые пересекают несколько «Шагов».Лучший метод для присвоения имен элементам в трехмерном массиве?

Я делаю много математики, где свойство взаимодействия, так, чтобы сделать свой код легче читать и писать, я назвал позицию элементов массива, как то, что они физически находятся:

x = 0 
y = 1 
z = 2 

с, что на месте, я могу написать так:

for Step in xrange(steps): 
    for Ball in xrange(balls) 
     ball[Ball,**z**,Step] + ball[Ball,**velocity_z**,Step]*dt 

в отличие от запоминания положения каждого свойства:

for Step in xrange(steps): 
    for Ball in xrange(balls) 
     ball[Ball,**2**,Step] + ball[Ball,**2**,Step]*dt 

Это мой текущий список свойств:

x = 0 
y = 1 
z = 2  
vel_x = 3 
vel_y = 4 
vel_z = 5 
acc_x = 6 
acc_y = 7 
acc_z = 8 
mass = 9 
radius = 10 
w_x = 11 
w_y = 12 
w_z = 13 
mag_w = 14 
mag_vel = 15 
mag_acc = 16 
velh_x = 17 
velh_y = 18 
velh_z = 19 

Это тогда определяет второй размер моего массива, чтобы иметь размер 20. Я люблю, как это делает код легко читать и писать, и я, конечно, не вы хотите использовать словари или что-то чрезвычайно неэффективное, так как моя программа должна работать так же быстро, как может работать python, но мне интересно, есть ли у кого-то более элегантное решение, которое будет столь же быстро вычислить.

спасибо.

+0

Использование констант достаточно изящно. Пожалуйста, уважайте [PEP-8] (https://www.python.org/dev/peps/pep-0008/) в своем коде – Pynchia

+0

Медленная часть вашего кода будет проходить по всем шарам и всем шагам. Если вам нужна скорость, рассмотрите возможность использования массивов numpy или pandas DataFrames. DataFrames дополнительно позволит вам работать с помеченными массивами, что, похоже, является тем, что вы пытаетесь выполнить здесь. Но, по моему мнению, подход, который вы приняли, в значительной степени может быть заменен именованным вертепом. – jme

+0

Возможно, проверьте dask (http://dask.pydata.org/en/latest/). он поддерживает помеченные слои и стремится быть эффективным. он построен астронармиками, поэтому я уверен, что он имеет в виду расчет. – user1269942

ответ

0

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