Python Numpy:保存的数组加载方式不同
我正在尝试保存一个数组,使用的是
print myArray.shape, myArray.dtype # returns (yyy, xxx) uint8
numpy.save('savedFile.npy',myArray)
然后再用
myArray = numpy.load('savedFile.npy')
print myArray.shape, myArray.dtype # returns (yyy, ) object
把它加载回来。我该如何让这个数组的形状和数据类型和之前一样呢?
谢谢!
--- 编辑 ---
这里是我遇到的问题:
import numpy as np
import cv2, os.path
allImageIDs = []
allImages = []
countImagesMax = 20
countImages = 0
while countImages < countImagesMax:
image = np.uint8(np.random.randint(2, size=(144,192)) *255)
allImages.append(np.reshape(image, (image.shape[0]*image.shape[1])))
allImageIDs.append(countImages)
countImages += 1
myArray = [np.array(allImages), np.array(allImageIDs)]
if not os.path.exists("savedFile.npy"):
np.save('savedFile.npy',myArray)
print myArray[0].shape, myArray[0].dtype # returns (yyy, xxx) uint8
else:
myArray = np.load('savedFile.npy')
print myArray[0].shape, myArray[0].dtype # returns (yyy, ) object
1 个回答
0
评论区的讨论让我找到了答案,决定使用 np.savez
而不是 np.save
。感谢大家的评论。
import numpy as np
import cv2, os.path
allImageIDs = []
allImages = []
countImagesMax = 20
countImages = 0
while countImages < countImagesMax:
image = np.uint8(np.random.randint(2, size=(144,192)) *255)
allImages.append(np.reshape(image, (image.shape[0]*image.shape[1])))
allImageIDs.append(countImages)
countImages += 1
myArray = [np.array(allImages), np.array(allImageIDs)]
if not os.path.exists("savedFile.npz"):
np.savez('savedFile.npz', images=myArray[0], ids=myArray[1])
print myArray[0].shape, myArray[0].dtype # returns (yyy, xxx) uint8
else:
npzfile = np.load('savedFile.npz')
myArray = [npzfile['images'], npzfile['ids']]
print myArray[0].shape, myArray[0].dtype # returns (yyy, xxx) uint8