我正在尝试更深入地了解 numpy 数组;特别是内存布局/所有权/共享相关方面。在那次努力中,我偶然发现了 UPDATEIFCOPY 标志,这听起来很有趣。 只是我从来没有真正见过它。 用户只能 unset它。如果你喜欢安静,谷歌搜索“UPDATEIFCOPY True”会非常放松。
那么如何创建一个将该标志设置为 True 的数组?
最佳答案
使用np.nditer
时可以设置if (示例取自 NumPy source code ):
>>> import numpy as np
>>> a = np.zeros((6*4+1,), dtype='i1')[1:]
>>> a.dtype = 'f4'
>>> a[:] = np.arange(6, dtype='f4')
>>> i = np.nditer(a, [], [['readwrite', 'updateifcopy', 'aligned']])
>>> print(i.operands[0].flags)
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : True # <--- :-)
但是我不知道这是在什么情况下真正设置的,因为如果我删除前两行,它就不再起作用了:
>>> import numpy as np
>>> a = np.arange(6, dtype='f4')
>>> i = np.nditer(a, [], [['readwrite', 'updateifcopy', 'aligned']])
>>> print(i.operands[0].flags)
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False # <--- :-(
关于python - UPDATEIFCOPY 标志是否为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41952401/