cod*_*ife 4 python numpy copy-on-write
我有一个返回大型NumPy数组的类。这些数组被缓存在类中。我希望返回的数组是写时复制数组。如果调用者最终只是从数组中读取,则不会进行任何复制。这样可以避免使用多余的内存。但是,该数组是“可修改的”,但不会修改内部缓存的数组。
目前,我的解决方案是将所有缓存的数组设置为只读(a.flags.writeable = False)。这意味着,如果函数的调用者想要修改数组,则可能必须制作自己的数组副本。当然,如果源不是来自缓存,并且阵列已经可写,则它们将不必要地复制数据。
因此,最理想的情况是我喜欢这样的东西a.view(flag=copy_on_write)。似乎有个相反的标志,UPDATEIFCOPY一旦释放,副本就会更新原件。
谢谢!
写入时复制是一个很好的概念,但显式复制似乎是“ NumPy理念”。因此,就个人而言,如果不太笨拙,我会保留“只读”解决方案。
但是我承认已经编写了自己的写时复制包装器类。我不会尝试检测对该数组的写访问。相反,该类具有方法“ get_array(readonly)”,返回其(否则为私有的)numpy数组。第一次使用“ readonly = False”进行调用时,它会进行复制。这是非常明确,易于阅读和快速理解的。
如果您的写时复制numpy数组看起来像经典的numpy数组,那么您的代码阅读者(可能是两年之内)可能会遇到困难。
| 归档时间: |
|
| 查看次数: |
1474 次 |
| 最近记录: |