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