无法修改numpy数组

时间:2018-12-29 17:07:50

标签: python numpy matplotlib numpy-ndarray

我在使用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 :(得分:0)

当前的问题是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

答案 1 :(得分:0)

有时,如果尝试将write标志设置为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)