Вы просматриваете документацию для Numpy 1.15, и в ней используется новая функция nditer()
, представленная в этом выпуске :
При определенных условиях в контекстном менеджере должен использоваться nditer
При использовании numpy.nditer
с флагами "writeonly"
или "readwrite"
существуют некоторые обстоятельства, когда nditer
фактически не дает представление о доступном для записи массиве. Вместо этого он дает вам копию, и если вы вносите изменения в копию, nditer
позже записывает эти изменения обратно в ваш фактический массив. В настоящее время эта обратная запись происходит, когда объекты массива собираются мусором, что делает этот API подверженным ошибкам в CPython и полностью не работает в PyPy. Следовательно, nditer
теперь должен использоваться как менеджер контекста всякий раз, когда он используется с записываемыми массивами, например, with np.nditer(...) as it: ...
. Вы также можете явно вызвать it.close()
для случаев, когда менеджер контекста не работает, например, в выражениях генератора.
Ошибка указывает, что у вас есть более ранняя версия Numpy; оператор with
работает только с * диспетчерами контекста, которые должны реализовывать __exit__
(и __enter__
) , а исключение AttributeError
указывает, что в вашей версии Numpy требуемая реализация отсутствует ,
Либо обновите, либо не используйте with
:
for x in np.nditer(a, op_flags=['readwrite']):
x[...] = 2 * x
При использовании CPython вы можете по-прежнему сталкиваться с проблемами, вызвавшими изменения, внесенные в выпуск 1.15. При использовании PyPy вы будете сталкиваться с этими проблемами, и обновление - ваш единственный правильный выход.
Возможно, вы хотите обратиться к 1.14 версии той же записи документации, которую вы использовали (или, более конкретно, выбрать правильную документацию для вашей локальной версии .