.... где "неожиданный" означает, что _I_ этого не ожидал. Это может быть просто исправление документации, или, может быть, меня будут ругать за то, что я не понимаю, как работает np.ma
, но я не думаю, что такое поведение уместно:
In [100]: x = np.ma.ones(5)
In [101]: x.mask = [False,False,True,False,False]
In [102]: np.copy(x)
Out[102]: array([ 1., 1., 1., 1., 1.])
In [103]: np.ma.copy(x)
Out[103]:
masked_array(data = [1.0 1.0 -- 1.0 1.0],
mask = [False False True False False],
fill_value = 1e+20)
In [104]: np.__version__
Out[104]: '1.8.0.dev-074a40c'
Я бы, по крайней мере, ожидал предупреждения, но предпочел бы видеть в порядке предпочтения:
np.copy(x)
возвращает замаскированный массив (поскольку x - замаскированный массив)np.copy(x)
предупреждает, что он демаскирует массив, а затем возвращает тот же массив, что и вышеnp.copy(x)
вызывает исключениеnp.copy(x)
возвращает [1,1,nan,1,1]
(вероятно, это не идеально)Все еще открыт в 1.9-devel
Однако не знаю, как это исправить без специальных массивов с маскировкой корпуса.
Может ли изменение логики np.copy для включения subok=True
в вызов массива решить эту проблему?
Из:
return array(a, order=order, copy=True)
Кому:
return array(a, order=order, subok=True, copy=True)
Если да, то должен ли subok быть параметром для np.copy
и какое значение должно быть по умолчанию, True или False? True вернет первый предпочтительный результат, False сохранит текущее поведение, но разрешит ожидаемое поведение, но добавит аргумент.
Я не сторонник добавления параметра subok
к np.copy
когда у нас уже есть два вполне жизнеспособных решения:
.copy()
np.array(a, subok=True)
(по умолчанию копирует)Я бы на самом деле утверждал обратное, поскольку я думаю, что в большинстве случаев «копия» создает впечатление, что кто-то получит обратно что-то, что на самом деле является копией и, следовательно, того же типа. Я также считаю это небольшим, но полезным вкладом в то, чтобы сделать весь numpy более последовательным, способным работать с подклассами (так же, как я делал ранее с np.broadcast_arrays
, где не было хорошей замены). Однако, учитывая необходимость сохранения обратной совместимости, я думаю, что мы застряли со значением по умолчанию subok=False
.
В любом случае, @jjhelmus , почему бы не сделать быстрый пиар и не узнать, что думают другие?
@shoyer : np.copy, вероятно, должен войти в ваш список функций, которым требуется
какая-то поддержка массива уток - для массива уток я думаю np.copy
и np.array, вероятно, должны делать разные вещи. Может, стоит просто позвонить
arr.copy?
15 октября 2015 г., 7:00, Мартен ван Керквейк <
[email protected]> написал:
На самом деле я бы поспорил с обратным, поскольку я считаю, что большинство "копий" дает
впечатление, что кто-то получит обратно что-то, на самом деле копию,
и, следовательно, того же типа. Я также рассматриваю это как небольшой, но полезный вклад
чтобы все numpy более последовательно могли работать с подклассами
(так же, как я делал ранее с np.broadcast_arrays, где нет хорошей замены
был в наличии). Однако, учитывая необходимость сохранения обратной совместимости, я
Думаю, мы застряли со значением по умолчанию subok = False.В любом случае, @jjhelmus https://github.com/jjhelmus , почему бы не сделать быстрый пиар
и посмотреть, что думают другие?-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/numpy/numpy/issues/3474#issuecomment -148395201.
Натаниэль Дж. Смит - http://vorpus.org
Да, я бы получил +1, если бы np.copy попробовал вызвать метод копирования для утиных массивов.
По-прежнему нет причин не поддерживать subok
. И, конечно, можно просто вызвать __copy__
если он существует.
Создан PR # 6509, который добавляет к функции параметр False . Я предполагаю, что это откроет дискуссию по этой теме. Не уверен, что это обычно происходит в PR, проблеме или списке рассылки.
Обсуждение API должно быть в списке рассылки.
18 октября 2015 г., 19:37, "Джонатан Дж. Хельмус" [email protected]
написал:
Создан PR № 6509 https://github.com/numpy/numpy/pull/6509, который добавляет
Параметр _subok_ функции со значением по умолчанию _False_. я
предположение, это откроет дискуссию по теме. Не уверен, что это
обычно размещается в PR, проблеме или списке рассылки.-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/numpy/numpy/issues/3474#issuecomment -149080511.
Я отправлю электронное письмо в список рассылки по этой теме завтра.