在 Python 3.x 中,我正在处理大型 numpy 数组。我想确认(无需实际进行某种实验)我编写的方法要么使用数组的副本,要么使用对数组的直接引用。
我还想确认相关数组是否已修改。
在 C++ 中,如果我想确保一个对象未被修改,我可以将其作为常量传递...在 Python 中,我似乎没有这样的保证并且必须格外小心。
因此,总结一下:我需要一种方法来判断是否已生成 numpy 数组的副本。我需要一种方法来判断数组(或与此相关的任何对象)是否已被修改。我更喜欢一种快速、自动的方式,而不是必须进行实验。
最佳答案
您可以使用 np.ndarray.flags
:
>>> a = np.arange(5)
>>> a.flags
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
例如,您可以使用 np.setflags
将数组设置为不可写;在这种情况下,尝试修改数组将失败:
>>> a.setflags(write=False) # sets the WRITEABLE flag to False
>>> a[2] = 10 # the modification will fail
ValueError: assignment destination is read-only
另一个有用的标志是 OWNDATA
,例如它可以指示该数组实际上是另一个数组的 View ,因此不拥有它的数据:
>>> a = np.arange(5)
>>> b = a[::2]
>>> a.flags['OWNDATA']
True
>>> b.flags['OWNDATA']
False
关于python - 如何验证何时使用 Python 制作副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29411707/