您的位置:

将Numpy数组存储到文件的高效方法

一、Numpy数组的存储方式

Numpy是Python中重要的科学计算库,它提供了高性能的多维数组对象和丰富的函数库。在处理大量数据时,如果直接使用Python自带的列表进行操作,速度可能会十分缓慢。而使用Numpy数组则可以提高处理速度。在进行科学计算、数据分析等领域的研究过程中,常常需要将Numpy数组存储到文件中,以便随后使用。Numpy支持多种文件格式对数组进行存储,包括二进制格式、文本格式、NPZ格式等。

二、二进制格式存储Numpy数组

import numpy as np

arr = np.array([1, 2, 3])
arr.tofile('data.bin') #将数组存储到二进制文件中
new_arr = np.fromfile('data.bin', dtype=np.int16) #从二进制文件中读入数据

二进制格式最基本的存储方式是使用Numpy提供的"tofile"函数,将数组直接存储到硬盘中。"tofile"函数需要一个文件名作为参数来指定存储的位置。可以通过祖先类型来指定存储的数据类型,若没有指定数据类型,则默认为float类型。在读取二进制文件时,可以使用Numpy提供的"fromfile"函数,从文件中读取数据,该函数读入的数据需要手动reshape为原数组的形状。

三、文本格式存储Numpy数组

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])
np.savetxt('data.txt', arr) #将数组存储到文本文件中
new_arr = np.loadtxt('data.txt') #从文本文件中读入数据

除了二进制文件外,我们也可以使用文本文件存储Numpy数组。Numpy提供了"save"和"savez"函数来存储Numpy数组为文本文件,其中"save"函数将数组保存为.npy文件,"savez"函数将数组保存为.npz文件。此外,Numpy还提供了"load"和"loadtxt"函数来从文件中读取数据。"savetxt"函数可以将Numpy数组保存为txt文件或csv文件,具体可以指定分割符和小数点位数等参数。而"loadtxt"函数用于从txt文件中读取数据,不支持读取csv文件。

四、NPZ格式存储多个Numpy数组

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
np.savez('data.npz', arr1=arr1, arr2=arr2) #将多个数组存储到npz文件中
data = np.load('data.npz') #从npz文件中读入数据
new_arr1 = data['arr1'] #获取存储的第一个数组
new_arr2 = data['arr2'] #获取存储的第二个数组

NPZ格式是一种压缩存储多个Numpy数组的格式,与.npy格式不同,NPZ格式可以存储多个数组,并且在进行读取时,不需要手动将多个数组的文件名都传递给函数。我们可以使用"savez"函数将多个数组保存为一个npz文件,也可以使用"savez_compressed"函数将多个数组压缩并存储。

五、高效存储大型Numpy数组

对于大型Numpy数组的存储,我们需要考虑存储效率和存储速度。如果遇到非常大的多为数组,我们可以考虑使用"memmap"函数来直接在磁盘中对数组进行读写操作。

import numpy as np

big_arr = np.memmap('big_data.bin', dtype=np.float32, mode='w+', shape=(1000000, 1000)) #创建一个大型Numpy数组
big_arr[:] = np.random.rand(1000000, 1000) #将数组赋值为随机数

"memmap"函数返回一个numpy.memmap对象,该对象在内存中只存储数组的元数据,真正的数据存储在磁盘中,使用者无需担心内存限制问题。"memmap"函数需要提供文件名、数组的数据类型、读写模式和数组的维度大小等参数。