Ответ 1
В зависимости от ваших обычаев flags['OWNDATA']
выполнит эту работу.
На самом деле, нет никакой проблемы с вашей ссылкой. В некоторых случаях это не срабатывает. Он всегда будет делать то, что должен делать.
Согласно http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.require.html: флаг "обеспечивает массив, который владеет своими собственными данными".
В вашем "контрпример" они используют код:
print (b.flags['OWNDATA']) #False -- apparently this is a view
e = np.ravel(b[:, 2])
print (e.flags['OWNDATA']) #True -- Apparently this is a new numpy object.
Но во втором случае это нормальное поведение True.
Он исходит из определения ravel
(из http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.ravel.html).
Возвращает непрерывный сплющенный массив. Возвращается 1-D массив, содержащий элементы ввода. Копия делается только при необходимости.
Здесь требуется копия, поэтому сделана копия. Таким образом, переменная e действительно владеет собственными данными. Это не "вид b", "ссылка на b", "псевдоним на часть b". Это настоящий новый массив, содержащий копию некоторых элементов b.
Итак, Я думаю, что это невозможно без отслеживания всего источника данных для обнаружения такого поведения. Я считаю, что вы должны создать свою программу с этим флагом.