Почему numpy.ravel возвращает копию?

В следующем примере:

>>> 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?

Изменить:

Как указал мгилсон, 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.

11
задан user545424 23 July 2012 в 19:09
поделиться