gpt4 book ai didi

用于操作非常大的矩阵的 Python 库

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:00 25 4
gpt4 key购买 nike

什么是用于处理非常大的矩阵(例如数百万行/列)的优秀 Python 库,包括在矩阵生命周期的任何阶段添加行或列的能力?

我看过pytablesh5py ,但都不支持在创建矩阵后添加或删除行或列。

我唯一能找到的另一件事是 these 中提到的 numpy/scipy 中的稀疏矩阵功能questions .然而,添加/删除行和列的能力似乎是可能的,但官方不支持并且有点老套,所以我担心真实数据集的性能会很糟糕。此外,它包括几个不同的稀疏矩阵实现,所以我很困惑哪一个是最好的(例如 lil_matrix vs csc_matrix vs csr_matrix)。

最佳答案

如果您的矩阵是稀疏的,您可以添加或删除行或列,而无需使用 scipy.sparse。如果您想删除列(进行列切片),您应该使用 csc_matrix,而 csr_matrix 应该用于高效的行切片。通常使用coo_matrix 类型创建稀疏矩阵很方便,您可以在其中指定rowcoldata对于每个非零条目:

m = coo_matrix((data, (row, col)), shape=(nrow, ncol))
m = m.to_csr()[rows_to_keep, :]
m = m.to_csc()[:, cols_to_keep]

其中 rows_to_keep 可以是列表或一维数组,其中包含要保留的索引。

如果您需要密集矩阵,您可以使用 numpy.memmap() 数组。要创建一个,您可以执行以下操作:

a = np.memmap('test.memmap', dtype='float64', mode='w+', shape=(1000, 1000))
a.fill(100.)

阅读一个你可以做的:

a = np.memmap('a.memmap', dtype='float64', mode='r+', shape=(1000, 1000))

如果你想删除或添加行和列,你必须创建第二个 memmap 数组,然后从原始数组中分配你想要的列:

b = np.memmap('b.memmap', dtype='float64', mode='w+', shape=(3, 1000))
b = a[[0, 99, 199], :]

这将在 b 中保存 a 的第一行、第 100 行和第 200 行,以及所有列。

关于用于操作非常大的矩阵的 Python 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23298391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com