Python:如何使浮点数组的大 numpy 数组相对较小?
Python: how to keep a big numpy array of arrays of floats relatively small?
我有一个通过使用 cv2 包读取许多图像创建的 numpy 数组。我以灰度方式读取图像,因此像素值从 0 到 255,在这种情况下,数据类型为 uint8。这意味着每个数据元素的大小为 1 个字节。我使用每个图像创建一个列表,然后想将数组列表转换为数组数组。之后,我需要将这些数据输入模型,但模型需要图像像素值在 1 和 0 之间浮动。现在 Python 中的每个浮点数都是 8 个字节。所以我尝试使用这个 cv2 函数
来转换每个数组
unlabeled_img_array = cv2.normalize(unlabeled_img_array.astype('float'), None, 0.0, 1.0, cv2.NORM_MINMAX)
有效,我可以创建数组列表。当我尝试将数组列表转换为数组数组时出现问题:
unlabeled_img_array_arrays = np.array(unlabeled_img_list_arrays)
然后我得到一个内存错误,显然是因为矩阵太大了。如果我使用数据类型 uint8 执行此操作,则不会出现错误。
我的问题是。有没有办法解决这个问题,还是我必须坚持使用 uint8 而不是浮点值?
编辑:
我也试过用这个
cv2.normalize(unlabeled_img_array.astype(np.float16), None, 0.0, 1.0, cv2.NORM_MINMAX)
但它给了我这个错误
TypeError: src data type = 23 is not supported
有没有办法让数组变成float16?也许这将足以减少尺寸。虽然不确定模特是否接受
您可以尝试 'float16' 而不是 'float',这名义上可以节省 3/4 的内存。
我有一个通过使用 cv2 包读取许多图像创建的 numpy 数组。我以灰度方式读取图像,因此像素值从 0 到 255,在这种情况下,数据类型为 uint8。这意味着每个数据元素的大小为 1 个字节。我使用每个图像创建一个列表,然后想将数组列表转换为数组数组。之后,我需要将这些数据输入模型,但模型需要图像像素值在 1 和 0 之间浮动。现在 Python 中的每个浮点数都是 8 个字节。所以我尝试使用这个 cv2 函数
来转换每个数组unlabeled_img_array = cv2.normalize(unlabeled_img_array.astype('float'), None, 0.0, 1.0, cv2.NORM_MINMAX)
有效,我可以创建数组列表。当我尝试将数组列表转换为数组数组时出现问题:
unlabeled_img_array_arrays = np.array(unlabeled_img_list_arrays)
然后我得到一个内存错误,显然是因为矩阵太大了。如果我使用数据类型 uint8 执行此操作,则不会出现错误。
我的问题是。有没有办法解决这个问题,还是我必须坚持使用 uint8 而不是浮点值?
编辑:
我也试过用这个
cv2.normalize(unlabeled_img_array.astype(np.float16), None, 0.0, 1.0, cv2.NORM_MINMAX)
但它给了我这个错误
TypeError: src data type = 23 is not supported
有没有办法让数组变成float16?也许这将足以减少尺寸。虽然不确定模特是否接受
您可以尝试 'float16' 而不是 'float',这名义上可以节省 3/4 的内存。