Python 使用二进制信息高效保存4D阵列

Python 使用二进制信息高效保存4D阵列,python,numpy,binary,save,Python,Numpy,Binary,Save,我有一个4D数组,其中轴=3处的每个值都是1或0。我已尝试将其保存为.npy文件中的数组。但对于(252512512,6)阵列,这已经提供了3GB的数据。我想知道是否有可能以更有效的方式存储此类数据。从而大大降低了文件大小 我已经尝试过使用“假”和“真”,我把它降到了400MB左右,但我仍然在寻找进一步减少这个数字的可能性。通过数据类型或我保存它的方式。您可以使用,这将显著压缩阵列并减小文件大小: # create sample array: >>> x = np.random

我有一个4D数组,其中轴=3处的每个值都是1或0。我已尝试将其保存为.npy文件中的数组。但对于(252512512,6)阵列,这已经提供了3GB的数据。我想知道是否有可能以更有效的方式存储此类数据。从而大大降低了文件大小

我已经尝试过使用“假”和“真”,我把它降到了400MB左右,但我仍然在寻找进一步减少这个数字的可能性。通过数据类型或我保存它的方式。

您可以使用,这将显著压缩阵列并减小文件大小:

# create sample array:
>>> x = np.random.randint(1, 30, size=(252, 512, 512, 6))

>>> np.savez("test.npz", x)
# test.npz is 2.95GB

>>> np.savez_compressed("test2.npz", arr = x)
# test2.npz is 369MB
要重新加载阵列,请使用

>>> loaded = np.load("test2.npz")
>>> x2 = loaded["arr"]
您可以测试x2(重新加载的数组)是否等于x(原始数组)


“…其中轴=3处的每个值都是1或0。”这是否意味着数组中的所有值都是0或1?这是否回答了您的问题?非常感谢。这实际上是一个非常合理的解决方案。这与使用True和False一起将其压缩到.5MB
>>> np.array_equal(x, x2)
True