numpy массив является неизменным после matplotlib.pyplot.imread () - PullRequest
0 голосов
/ 24 августа 2018

Почему массив numpy остается неизменным после чтения с использованием matplotlib.pyplot.imread? В чем причина этого?

>>> import matplotlib
>>> test=matplotlib.pyplot.imread('download.jpeg')
>>> test.flags
  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : False
  WRITEABLE : False
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False

1 Ответ

0 голосов
/ 24 августа 2018

С точки зрения того, что происходит в коде, matplotlib.pyplot.imread делегирует Pillow для чтения файла, а затем вызывает np.asarray для получающегося объекта PIL.Image.Image. При преобразовании PIL.Image.Image в массив NumPy объект Image создает строку байтов для использования в качестве буфера массива. Строки байтов являются неизменяемыми, поэтому результирующий массив не записывается.

С точки зрения того, почему кто-то из команды разработчиков Matplotlib или Pillow выбрал реализацию, которая приводит к созданию не перезаписываемого массива, я не знаю. Непонятно, было ли это намеренно.

Если вы хотите записываемый массив, вызовите метод copy массива:

mutable_array = matplotlib.pyplot.imread('download.jpeg').copy()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...