寻找一种方法来可靠地识别numpy对象是否是一个视图。numpy:可靠(非保守)指标,如果numpy数组是查看
相关问题已经提出了很多次(here,here,here),人们已经提出了一些解决方案,但都似乎有问题:
- 现在
pandas
使用的测试是指对某事物一个视图如果my_array.base is not None
。这似乎总是能够捕捉到意见,但也提供了大量的误报(即使它不是报告某种情况的视图)。 numpy.may_share_memory()
将检查两个特定的阵列,但不会回答一般- (@RobertKurn说是为2012年最佳工具 - ?任何更改)
flags['OWNDATA'])
是reported (third comment first answer)在失败一些案例。
(原因我感兴趣的是,我正在执行写入时复制的大熊猫,以及保守的指标是导致过度复制。)
关于numpy github跟踪器的相关讨论:https://github.com/numpy/numpy/issues/5604 –
描述为误报的情况似乎是当“创建副本”的操作实际上返回复印件。如果这被认为是“不是视图”,你可以尝试检查数组“base”的refcount以查看是否有其他引用,但这不会是完美的。我不认为有可能可靠地检测到这种事情。 – user2357112
也看到这个最近的SO问题,http://stackoverflow.com/questions/33467477/how-to-find-all-variables-with-identical-id。它提到了一个新的函数'np.shares_memory'。但是我在那里指出,比较两个已知变量是一回事,要问的另一个问题是数组与其他数组共享数据缓冲区。 – hpaulj