为什么使用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
答案 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()