直截了当地说,事情是这样的:
我不小心使用.tofile()
(而不是.save()
)保存了numpy
s数组。然后,我不能(但应该有)使用.load()
加载它,而只能使用.fromfile()
。
这个问题是在我试图转换它时发生的,因为我忘记了加载指定类型int的数组(将其保留为默认类型-Float)。
本应发生的事情
import numpy as np
PATH = 'test.npy'
x = np.array([[100, 200, 300], [400, 500, 600]])
print('x', x)
x.tofile(PATH)
# pay close attention to `dtype=int`
y = np.fromfile(PATH, dtype=int)
print('y', y)
np.save(PATH, y)
z = np.load(PATH)
print('z', z)
输出:
x [[100 200 300]
[400 500 600]]
y [100 200 300 400 500 600]
z [100 200 300 400 500 600]
实际发生的事情:
import numpy as np
PATH = 'test.npy'
x = np.array([[100, 200, 300], [400, 500, 600]])
print('x', x)
x.tofile(PATH)
# here, no `dtype` is specified
y = np.fromfile(PATH)
print('y', y)
np.save(PATH, y)
z = np.load(PATH)
print('z', z)
print('z', z.astype(int))
输出:
x [[100 200 300]
[400 500 600]]
y [4.941e-322 9.881e-322 1.482e-321 1.976e-321 2.470e-321 2.964e-321]
z [4.941e-322 9.881e-322 1.482e-321 1.976e-321 2.470e-321 2.964e-321]
z [0 0 0 0 0 0]
我试着把数字提高到次方,但没有成功。
有什么解决方案可以保存文件吗?
原始文件丢失,我只有被覆盖(损坏)的文件。
1条答案
按热度按时间cfh9epnr1#
答案(由@hpaulj提供):
z.view(int)
完整的解决方案:
使用以下输出: