不可变的numpy数组?

NPE*_*NPE 63 python arrays numpy readonly immutability

有没有一种简单的方法来创建不可变的NumPy数组?

如果必须从中派生出一个类ndarray,那么为了实现不变性,必须覆盖的最小方法集是什么?

Jos*_*del 95

你可以使一个numpy数组不可写:

a = np.arange(10)
a.flags.writeable = False
a[0] = 1
# Gives: RuntimeError: array is not writeable
Run Code Online (Sandbox Code Playgroud)

另请参阅此主题中的讨论:

http://mail.scipy.org/pipermail/numpy-discussion/2008-December/039274.html

和文件:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.flags.html

  • 或者,`a.setflags(write = False)`. (17认同)
  • 重要的!!Numpy 没有不可变数组。带有 `.flags.writeable = False` 的数组仍然不是不可变的。如果 `x` 是一个数组,则 `y = x[:]; x.flags.writeable = False; y[0] = 5` 将 `x` 的第一个元素更新为 `5`。 (12认同)
  • @aix:快速浏览文档可能会使两种方法看起来完全相同.就个人而言,我更喜欢使用方法来设置属性. (3认同)
  • 这是否也使其易于记忆? (3认同)
  • @JamesParker 当你切片时,标志似乎随数组一起出现。因此,如果在切片之前将“writable”标志设置为“False”,那么上面的“y”将在更新时失败。 (3认同)