在以下示例中:
>>> import numpy as np
>>> a = np.arange(10)
>>> b = a[:,np.newaxis]
>>> c = b.ravel()
>>> np.may_share_memory(a,c)
False
为什么要numpy.ravel
返回我的数组的副本?它不应该只是返回a
吗?
编辑:
我刚刚发现它np.squeeze
不会返回副本。
>>> b = a[:,np.newaxis]
>>> c = b.squeeze()
>>> np.may_share_memory(a,c)
True
squeeze
在这种情况下,为什么和之间有区别ravel
?
编辑:
正如 mgilson 所指出的,newaxis
将数组标记为不连续,这就是ravel
返回副本的原因。
所以,新的问题是为什么newaxis
将数组标记为不连续的。
故事变得更奇怪了:
>>> a = np.arange(10)
>>> b = np.expand_dims(a,axis=1)
>>> b.flags
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
>>> c = b.ravel()
>>> np.may_share_memory(a,c)
True
根据文档expand_dims
,它应该等同于newaxis
.