有没有一种简单的方法创建不可变的NumPy数组?
如果必须从ndarray
派生一个类来实现这一点,那么最少需要重写哪些方法才能实现不可变性?
有没有一种简单的方法创建不可变的NumPy数组?
如果必须从ndarray
派生一个类来实现这一点,那么最少需要重写哪些方法才能实现不可变性?
a = np.arange(10)
a.flags.writeable = False
a[0] = 1
# Gives: ValueError: assignment destination is read-only
还可以在这个帖子中看到讨论:
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)
。 - lafras.flags.writeable = False
的数组,它们仍然是可变的。
如果 x
是一个数组,y = x[:];x.flags.writeable = False;y[0] = 5
将会将 x
的第一个元素更新为 5
。 - James Parkerwritable
标志设置为False
,那么上面的y
在更新时将失败。 - Damon Maria直接设置标志对我没有起作用,但使用 ndarray.setflags
却可以:
a = np.arange(10)
a.setflags(write=False)
a[0] = 1 # ValueError
我在这个代码片段中有一个Array的子类:https://gist.github.com/sfaleron/9791418d7023a9985bb803170c5d93d8
它会复制其参数并将其标记为只读,因此您只能在非常谨慎的情况下自己给自己惹麻烦。我的直接需求是使其可哈希,以便我可以在集合中使用它们,所以这也可以。它不是很多代码,但大约70%的行用于测试,因此我不会直接发布它。
请注意,它不是一个即插即用的替代品;它不会像普通的Array构造函数一样接受任何关键字参数。但实例的行为与数组相同。