首页 > 解决方案 > 使用 numpy 矢量化对大量对象状态进行操作的良好模式是什么?

问题描述

我正在编写代码来模拟大量(> 500)对象随着(离散化)时间的推移而发生的交互。在每个时刻,我都想使用 numpy 对更新过程进行矢量化处理,这涉及到计算,这些计算是每个对象当前状态的函数。

更复杂的是,在每个时刻的开始,都可能会添加或删除对象,因此一段时间后 ID 可能会变得不连续。这使得使用大型 numpy 数组将所有内容存储在一个地方有点困难;除了我想保留当前的“对象获取属性”样式访问数据以提高代码可读性。

我尝试看看是否有办法使用对象哈希来索引 numpy 数组,但到目前为止似乎没有这样的机制。我想这归结为需要在内存中连续存储数据的 numpy 与我的问题数据的动态性质之间的冲突。我目前正在维护一种翻译机制,本质上是一个双向字典,可以将对象哈希来回转换为相应的 numpy 数组索引,但不确定是否有更好的范例来做这种事情。

例如,这是我想用低效版本编写的内容:

for t in range(0, MAX_TIME):
  all_bar = []
  for x in foos:
    all_bar.append(x.bar)
  all_baz = calc1(all_bar)
  for v in all_baz:
    x.baz = v

编辑:我知道您可以在运行时修改全局大型 numpy 数组,但它会使访问单个对象的属性给定对象句柄很麻烦,因为您需要弄清楚它在数组中的当前索引是什么。我仍然想保留“x.baz”样式的访问权限。

标签: pythonnumpysimulation

解决方案


推荐阅读