Не могу изменить массив NumPy - PullRequest
0 голосов
/ 29 декабря 2018

Я застрял, тренируясь с изображениями в Python 3:

import numpy as np
from matplotlib.image import imread
photo_data = imread('c:\jpeg.jpg')
photo_data[0,0,1] = 0

Я получаю эту ошибку

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-40-f19579124b68> in <module>()
      1 photo = photo_data
      2 print(type(photo))
----> 3 photo[0,0,1] = 0
      4 plt.imshow(photo_data)

ValueError: assignment destination is read-only

Я слежу за онлайн-курсом, где этот код работает, не могли бы выскажи, что я не так делаю?

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

несколько раз вы получите ошибку, как показано ниже, если попытаетесь установить флаг записи в True.

ValueError: cannot set WRITEABLE flag to True of this array

Просто скопируйте его и работайте.вместо этого полезно понижение версии numpy

photo = photo_data.copy() print(type(photo)) photo[0,0,1] = 0 plt.imshow(photo_data)

0 голосов
/ 29 декабря 2018

Проблема в том, что массив matplotlib установлен только для чтения.Для подтверждения:

print(photo_data.flags)

И вы получите:

C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : False
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False

Чтобы сделать его доступным для записи, просто:

photo_data.setflags(write=1)
photo_data[0,0,1] = 0
...