在matplotlib.pyplot.imread()之后,numpy数组是不可变的

时间:2018-08-24 18:05:09

标签: python numpy matplotlib

为什么使用matplotlib.pyplot.imread读取numpy数组后,它是不可变的?背后的原因是什么?

>>> 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 :(得分:2)

根据代码中发生的情况,matplotlib.pyplot.imread delegates to Pillow读取文件,然后calls np.asarray读取生成的PIL.Image.Image对象。将PIL.Image.Image转换为NumPy数组时,图像对象builds a bytestring用作数组的缓冲区。字节串是不可变的,因此生成的数组不可写。

关于Matplotlib或Pillow开发团队中的任何人为什么选择会导致数组无法写入的实现的原因,我不知道。目前尚不清楚这是否是故意的。

如果您想要一个可写的数组,请调用该数组的copy方法:

mutable_array = matplotlib.pyplot.imread('download.jpeg').copy()