Python 将图像转换为数组与直接初始化图像大小的数组
使用google colab,我想创建一个Python 将图像转换为数组与直接初始化图像大小的数组,python,numpy,python-imaging-library,Python,Numpy,Python Imaging Library,使用google colab,我想创建一个numpy数组,Y,它的形状类似于我所看到的图像(下面进一步解释)9999x146666 我发现有两种方法可以做到这一点: 方法1 使用以下命令加载图像: from PIL import Image Z = np.asarray(Image.open(*ImagePath*)) 将图像转换为数组(但我不确定这是如何发生的) 然后我可以简单地说Y=Z。当我仔细观察Y使用sys.getsizeof(Y)消耗的内存量时,它只报告112字节 方法2 如果我使
numpy
数组,Y
,它的形状类似于我所看到的图像(下面进一步解释)9999x146666
我发现有两种方法可以做到这一点:
方法1
使用以下命令加载图像:
from PIL import Image
Z = np.asarray(Image.open(*ImagePath*))
将图像转换为数组(但我不确定这是如何发生的)
然后我可以简单地说Y=Z
。当我仔细观察Y
使用sys.getsizeof(Y)
消耗的内存量时,它只报告112字节
方法2
如果我使用以下方法粗略初始化形状为9999x146666
的零的numpy.array
:
Y = np.array(np.zeros((9999,146666)))
它毫不奇怪地使我的colab实例崩溃(我认为这意味着它耗尽了colab提供的所有内存)
所以我的问题是,两个阵列之间的区别是什么,一个重约112字节,另一个炸毁了我的电脑
是的,我用两种方法检查了数组的大小和类型。它们是一样的。
编辑:我被告知这可能与PIL作为一个库的工作方式有关。也就是说,它在磁盘上创建一个指向文件的指针,并且只在对其执行操作时加载它。但它仍然存在,为什么数组不像初始化那样炸毁我的会话?尝试检查
arr2
的许多项以及arr2
项的大小(以字节为单位)。比如:np.array(np.zeros((99146)).size
和np.array(np.zeros((99146)).itemsize
。你会看到它非常大。Z
的大小是多少?Z
的大小是9999x146666年,但如果Z.shape
是(9999x146666)
,我会试图理解这个大小差异背后的原因;而Y=Z
则Y
将具有相同的形状;大概Z
会炸毁你的电脑。请提供一份报告。