python - 使用 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”样式的访问权限。
解决方案
推荐阅读
- c++ - OpenGL C++,工作几天后纹理突然变黑
- swift - Swift - CLLocation 数组的可编码解码数组
- reactjs - 在反应中调用调度函数
- file - 如何使用应用程序脚本覆盖内容超过 10MB 的文件?
- ios - 在 CAShapeLayer 中添加图像
- arrays - 批处理文件用预定义的文本替换文本文件中的特定行
- postgresql - WAL 被堆积起来 - 逻辑复制的 restart_lsn 不在 PostgreSQL 中移动
- flutter - 使用变量按 List 中的键排序
- java - 需要来自android java中模型的值名称
- java - windows上的java命令行参数处理