使用FROMFILE、TO FILE、SAVE和LOAD将格式错误的NumPy数组转换为int

iaqfqrcu  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(124)

直截了当地说,事情是这样的:
我不小心使用.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]

我试着把数字提高到次方,但没有成功。
有什么解决方案可以保存文件吗?

原始文件丢失,我只有被覆盖(损坏)的文件。

cfh9epnr

cfh9epnr1#

答案(由@hpaulj提供):z.view(int)
完整的解决方案:

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)

# solution

print('z', z.view(int))
print('z', z.view(int).reshape(-1, 3))

使用以下输出:

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 [100 200 300 400 500 600]
z [[100 200 300]
 [400 500 600]]

相关问题