【问题标题】:A better method for naming properties which are elements in a 3D array?命名属性的更好方法是 3D 数组中的元素?
【发布时间】:2015-11-27 20:53:31
【问题描述】:

我有“Ball”,有一些属性,如“x”、“y”和“z”,它们会循环多个“Steps”。

我在属性交互的地方做了很多数学运算,因此,为了使我的代码更易于阅读和编写,我将数组元素的位置命名为它们的物理位置:

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 一样快地运行,但我想知道是否有人有一个更优雅的解决方案,计算速度一样快。

谢谢。

【问题讨论】:

  • 使用常量已经足够优雅了。请尊重您的代码中的PEP-8
  • 代码中缓慢的部分将是循环所有球和所有步骤。如果您需要速度,请考虑使用 numpy 数组或 pandas DataFrames。 DataFrames 还允许您使用带标签的数组,这似乎是您在这里想要完成的。但我相信,您采用的方法在很大程度上可能会被命名元组所取代。
  • 也许可以查看 dask (dask.pydata.org/en/latest)。它支持标记层并努力提高效率。它是由 astro-nerds 构建的,所以我确信它考虑到了计算。
  • 我会看看dask。谢谢。 @Pynchia 我不尊重什么?
  • @jme 我正在使用 numpy 数组。 ball[Ball,x,Step] 是一个 numpy 3D 数组。

标签: python arrays multidimensional-array naming-conventions readability


【解决方案1】:

看来,为我的 numpy 数组中的元素位置设置常量对于直观的代码读写来说是一个很好的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-16
    • 2019-02-20
    • 2019-08-06
    • 2022-07-27
    • 1970-01-01
    • 2021-07-20
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多