numpy数组的可变大小

3

我正在使用skimage.io.imread加载图像,并将图像保存为numpy数组。以下是推断:

原始图像:(256x512x3)

enter image description here

以下是我执行的代码:

img = io.imread(img_file) # 48.1 kB
i1, i2 = img[:, :256], img[:, 256:]
np.save('i1', i1) # 196.7 kB
np.save('i2', i2) # 196.7 kB
final_image = np.empty([1, 2, 256, 256, 3])
final_image[0, 0], final_image[0, 1] = i1, i2
np.save('final', final_image) # 3.1 MB

有人可以解释一下为什么图像的大小差别这么大吗?

编辑: i1i2final_image 的数据类型是 np.float64


首先,final_image 的数据类型是 np.float_,很可能每个项目占用 8 个字节。 - juanpa.arrivillaga
i1i2的数据类型也是np.float_。但我没有看到保存的数组大小有如此大的增长。 - harman
1
嗯,我很确定它不是这样的。它应该默认读取为 np.uint8,至少在我的系统上是这样的。 - juanpa.arrivillaga
你能实际打印出 final_image.shape, final_image.dtype 吗? - juanpa.arrivillaga
是的,没错,i1i2的数据类型是uint8,而final_image的数据类型是float64 - harman
1个回答

2

numpy.empty 函数将默认使用您系统上的任何 np.float_,但是,您的图像应该已读入为np.uint8,因此请提供相应的dtypeempty函数:

final_image = np.empty([1, 2, 256, 256, 3], dtype=np.uint8)

这似乎没有解决问题。即使指定dtype为uint8,它也会变成float64 - harman
它至少在我的系统上正在改变。 - harman
1
抱歉,我的错。我在另一个文件中修改代码并执行了另一个文件。非常抱歉。 - harman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接