Я был озадачен различным поведением следующих двух способов изменить форму массивов numpy:
x.shape = (3,4)
x = x.reshape(3,4)
Вот пример:
In [1]: import numpy as np
##### Case 1
In [2]: fa = np.arange(12).reshape(4,3)
In [3]: x = fa
In [4]: x is fa
Out[4]: True
In [5]: x.shape = (3,4) # RESHAPING does not affect x
In [6]: x is fa
Out[6]: True
########Case 2 ########
In [7]: fa = np.arange(12).reshape(4,3)
In [8]: x = fa
In [11]: x.reshape(3,4) is fa # RESHAPING makes x a shallow copy
Out[11]: False
########Verify x is shallow copy
In [13]: fa = np.arange(12).reshape(4,3)
In [14]: x.reshape(3,4).base is fa.base
Out[14]: True
Я не могу понять, почему в первом случае изменения формы x остается таким же, как fa, но во втором случае после изменения формы x становится мелкой копией fa.