С точки зрения того, что происходит в коде, 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()