Numpy ndarray包含可变大小的对象(对象数组)

时间:2015-01-26 20:32:54

标签: python arrays numpy multidimensional-array

晚上好,

我目前正在开展第一年的大学项目,以模拟连续渗透。这涉及在n维空间中的正方形/立方体/超立方体上随机分布一些圆盘/球体/超球体,并找到跨越边界的连通粒子簇。

为了加速所有这些粒子之间基本上是碰撞检测以将它们分组到连接的簇中,我决定使用空间分区,这样我的程序可以很好地缩放粒子数。这需要我用均匀大小的盒子/立方体/超立方体来划分n维空间,并将粒子放置在相关的盒子内,以便可以进行优化的碰撞检查,这需要较少的比较,因为只有位于盒子/立方体/超立方体中的粒子相邻需要检查新粒子的位置。所有的细节都是通过算法计算出来的。

然而,使用具有"尺寸"的ndarray似乎是一个好主意。等于所研究的空间。然后每个"点"在ndarray中本身包含一组粒子对象。很容易看到存在于新粒子周围坐标中的ndarray中的对象,并循环通过包含在那些本身包含必须进行检查的其他粒子的数组中的数组。然后我发现ndarray只能包含固定大小的对象,这些粒子阵列不会随着粒子随机添加到系统中而生长。

数组(等等)数组的正常numpy数组是唯一的解决方案还是类似于ndarray但能够容纳可变大小的对象的结构? Ndarray似乎很棒,因为它是numpy的一部分,用编译的语言c编写,所以它会很快。此外,ndarray不需要和循环来构造,因为我相信数组的数组(等...)会(NB:空间的维数和空间划分的增量不是恒定的,因为可以添加不同半径的粒子,意思是空间分区正方形/立方体/超立方体大小的变化。)

速度在这个程序中非常重要,看到我发现的算法上很好的优化被糟糕的实现破坏将是一种耻辱!

1 个答案:

答案 0 :(得分:3)

您是否考虑过使用kd-tree? kd-trees通过分割空间来支持点的邻居的快速枚举(很像你在多维数组中建议的那样)。

作为一个很好的奖励,在SciPy中已经有了一个不错的kd-tree实现,这是NumPy的伴侣项目:scipy.spatial.KDTree