对于最小的工作示例,让我们数字化2D数组.numpy.digitize需要一维数组:
import numpy as np
N = 200
A = np.random.random((N, N))
X = np.linspace(0, 1, 20)
print np.digitize(A.ravel(), X).reshape((N, N))
Run Code Online (Sandbox Code Playgroud)
现在文档说:
......只在需要时才制作副本.
ravel在这种情况下,如何知道副本是否"需要"?通常 - 有没有办法可以确定特定操作是创建副本还是视图?
寻找一种可靠地识别numpy对象是否为视图的方法.
相关问题在此之前(这里,这里,这里)出现了很多次,人们提供了一些解决方案,但似乎都有问题:
pandas现在使用的测试是调用某个视图my_array.base is not None.这似乎总是捕捉到观点,但也提供了许多误报(即使它不是,它报告某些东西是一种观点的情况).numpy.may_share_memory() 将检查两个特定的数组,但不会回答一般
flags['OWNDATA'])被报道(第三评论第一个答案)在某些情况下失败.(我感兴趣的原因是我正在为大熊猫实施写时复制,而保守的指标导致过度复制.)
在Python 3.x中,我正在使用大型numpy数组.我想确认(无需实际进行某种实验)我编写的方法要么使用数组的副本,要么正在使用对数组的直接引用.
我想确认有问题的数组已经或未被修改过.
在C++中,如果我想确保一个对象没有被修改,我可以将它作为一个const ...在Python中传递,我似乎没有这样的保证,必须要格外小心.
总而言之:我需要一种方法来判断是否有一个numpy数组的副本.我需要一种方法来判断数组(或任何对象)是否已被修改.我更喜欢快速,自动的方式,而不是必须做一个实验.