- 分块处理数据
- 原理:将大数据集分成多个小块,分别进行处理,避免一次性加载整个大数据集到内存中。
- 示例代码:
import numpy as np
# 假设我们有一个大文件存储数据,文件名为large_data.txt,数据以空格分隔
chunk_size = 1000000 # 每次读取100万个数据
for chunk in np.genfromtxt('large_data.txt', delimiter=' ', max_rows = chunk_size):
# 对每个chunk进行处理,例如计算平均值
mean_value = np.mean(chunk)
print(f"Chunk mean: {mean_value}")
- 使用稀疏矩阵表示
- 原理:如果数据集中大部分元素为零(稀疏数据),使用稀疏矩阵表示可以大大减少内存占用。
scipy.sparse
库提供了多种稀疏矩阵格式。
- 示例代码:
from scipy.sparse import csr_matrix
import numpy as np
# 生成一个稀疏矩阵的示例
row = np.array([0, 0, 1, 2, 2, 2])
col = np.array([0, 2, 2, 0, 1, 2])
data = np.array([1, 2, 3, 4, 5, 6])
sparse_matrix = csr_matrix((data, (row, col)))
# 可以对稀疏矩阵进行操作,例如乘法
result = sparse_matrix.dot(sparse_matrix)
print(result.toarray())
- 使用内存映射数组
- 原理:内存映射数组(
np.memmap
)允许你在不将整个数据集加载到内存的情况下,像操作常规NumPy数组一样操作数据。数据存储在磁盘上,只有需要的部分被读入内存。
- 示例代码:
import numpy as np
# 创建一个内存映射数组
mmap_array = np.memmap('large_array.dat', dtype='float32', mode='w+', shape=(10000000, 100))
# 像操作常规数组一样操作内存映射数组
mmap_array[0, :] = np.random.rand(100)
# 读取数据
print(mmap_array[0, :])
# 关闭内存映射
del mmap_array