python - 如何验证何时使用 Python 制作副本?

标签 python arrays python-3.x numpy

在 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/

相关文章:

python - 如何使用 Python 从网络浏览器获取 cookie?

Python 3.6 在 AWS CodeBuild 中不可用,Python 3.5 在 AWS Lambda 中不可用

javascript - 如何列出对象?

python-3.x - 魔杖策略错误 : error/constitute. c/ReadImage/412

python - 如何使用 pandas 在标题行中应用过滤器

python - 使用 chaquopy 将 BeautifulSoup 实现到 Android Studio

c++ - 带参数 C++ 的对象数组的初始化列表

javascript - 将字符串数组排序为对象数组

python - 如何在 Ubuntu 上使用 Python 查找 Apache2 的配置错误?

python - Web 抓取未知数据结构(JSON、嵌套列表或其他?)