次の例では:
>>> 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。