gpt4 book ai didi

python - NumPy 数组写时复制

转载 作者:太空狗 更新时间:2023-10-30 02:11:30 29 4
gpt4 key购买 nike

我有一个返回大型 NumPy 数组的类。这些数组缓存在类中。我希望返回的数组是写时复制数组。如果调用者最终只是从数组中读取,则不会进行任何复制。这将不会使用额外的内存。然而,数组是“可修改的”,但不会修改内部缓存的数组。

目前我的解决方案是将任何缓存数组设置为只读(a.flags.writeable = False)。这意味着如果函数的调用者想要修改数组,则可能必须制作自己的数组副本。当然,如果源不是来自缓存并且数组已经是可写的,那么他们就会不必要地复制数据。

所以,最理想的情况是我会喜欢像 a.view(flag=copy_on_write) 这样的东西。似乎有一个与此 UPDATEIFCOPY 相反的标志,它会导致副本在解除分配后更新原始副本。

谢谢!

最佳答案

写时复制是一个很好的概念,但显式复制似乎是“NumPy 哲学”。所以我个人会保留“只读”解决方案,如果它不是太笨拙的话。

但我承认自己编写了写时复制包装类。我不尝试检测对数组的写访问。相反,该类有一个方法“get_array(readonly)”返回它的(否则是私有(private)的)numpy 数组。第一次使用“readonly=False”调用它时,它会生成一个副本。这是非常明确、易于阅读和快速理解的。

如果您的写时复制 numpy 数组看起来像经典的 numpy 数组,您的代码的读者(可能是 2 年后的您)可能会遇到困难。

关于python - NumPy 数组写时复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21896030/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com