В следующем примере:
>>> 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
?
Edit:
Я только что обнаружил, что np.squeeze
не возвращает копию.
>>> b = a[:,np.newaxis]
>>> c = b.squeeze()
>>> np.may_share_memory(a,c)
True
Почему существует разница между squeeze
и ravel
в этом случае?
Edit:
Как указано в 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
.