numpy数组在进行涉及到内存拷贝的操作时,一定要注意将其转换成连续的,也就是数组的元素在内存中是按顺序存储的,不然可能会无法得到预期的结果;
-
判断数组是否连续
你可以使用 .flags 属性中的 C_CONTIGUOUS 标志来判断一个数组是否是连续的。 -
将数组转换为连续数组
你可以使用 np.ascontiguousarray 函数将一个数组转换为连续数组。
比如:
- tofile操作:将数组保存成文件,这个数组一定得是连续的
cropped_img = img[:, x:x + crop_size, y:y + crop_size]
if not cropped_img.flags['C_CONTIGUOUS']:cropped_img = np.ascontiguousarray(cropped_img)
cropped_img.tofile(osp.join(opt['save_folder'], f'{img_name}_s{index:03d}{extension}'))
- torch.from_numpy也得是连续的
img_GT = torch.from_numpy(np.ascontiguousarray(np.transpose(img_GT, (2, 0, 1)))).float()