Python UPDATEIFCOPY标志是否为真?

Python UPDATEIFCOPY标志是否为真?,python,numpy,Python,Numpy,我试图更深入地理解numpy数组;特别是内存布局/所有权/共享相关方面。在这项工作中,我偶然发现了UPDATEIFCOPY标志,它听起来很有趣。 只是我从来没有真正看过它的设置。 用户只能使用它。如果你喜欢安静的话,谷歌搜索“UpdateIfcopyTrue”是非常放松的 那么,如何创建一个将该标志设置为True的数组呢?UPDATEIFCOPY标志永远不能设置为True 更新 如果数组不拥有自己的内存,则base属性返回该数组引用其内存的对象 返回的对象可能不是内存的原始分配器,但可能是从另一

我试图更深入地理解numpy数组;特别是内存布局/所有权/共享相关方面。在这项工作中,我偶然发现了UPDATEIFCOPY标志,它听起来很有趣。 只是我从来没有真正看过它的设置。 用户只能使用它。如果你喜欢安静的话,谷歌搜索“UpdateIfcopyTrue”是非常放松的


那么,如何创建一个将该标志设置为True的数组呢?

UPDATEIFCOPY标志永远不能设置为True

更新

如果数组不拥有自己的内存,则base属性返回该数组引用其内存的对象

返回的对象可能不是内存的原始分配器,但可能是从另一个对象借用它。如果此数组确实拥有自己的内存,则除非UPDATEIFCOPY标志为True,否则不会返回任何内存。在这种情况下,self.base是删除self时将更新的数组


为创建为常规数组的行为副本的数组自动设置UPDATEIFCOPY。其目的是让未对齐的阵列获得副本发生的任何更改。

您可以在使用时设置if(示例取自):

>>将numpy作为np导入
>>>a=np.zero((6*4+1,),dtype='i1')[1:]
>>>a.dtype='f4'
>>>a[:]=np.arange(6,dtype='f4')
>>>i=np.nditer(a、[]、[[]读写”、“更新复制”、“对齐])
>>>打印(i.操作数[0]。标志)
C_:对
F_:对
OWNDATA:正确
可写:对
对:对
UPDATEIFCOPY:True#>>将numpy作为np导入
>>>a=np.arange(6,dtype='f4')
>>>i=np.nditer(a、[]、[[]读写”、“更新复制”、“对齐])
>>>打印(i.操作数[0]。标志)
C_:对
F_:对
OWNDATA:正确
可写:对
对:对

UPDATEIFCOPY:False#你是故意这么做的,不是吗?我认为要求一个人类可读的版本是不可能的?无论如何,在这里,为你的麻烦投一票;-)我想我不能让它变得更简单,英语不是我的主要语言,所以它将是非常困难的:)技术上,这回答了我的问题,所以我接受了它。我想把这两个答案放在一起,一旦我的大脑停止转动,我可能就能解决这个问题。我认为UPDATEIFCOPY机制应该只在内部使用。所以在numpy源代码或C扩展中。在Python端使用这样的数组对用户来说是非常不友好的。numpy中的一个重要用例似乎是处理未对齐、数据类型不正确或不连续的
out
参数。请参阅。@user7138814经过这么长时间的一致回答。真的非常感谢你!就这么简单。但是MSeifert为他的答案挖掘的那个例子呢?我想当你把
'updateifcopy'
标志传递给
nditer
时,你应该知道你在做什么;-)示例中的前两行创建未对齐的数组,而
nditer
命令对齐数组。因此,它按预期工作。
>>> 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     # <--- :-(