从Memmapped数组中删除空白行

时间:2014-08-29 10:49:25

标签: python numpy

我有大约6000个json.gz文件总计24GB,我需要进行各种计算。 因为我不知道我将从每个JSON文件中获取的行数,(因为我会拒绝一些包含无效数据的行),所以我估计每个JSON最多有2000行。 / p>

我创建了一个数组形状为(6000*2000,10)的Memmapped Numpy,并将json.gz中的数据解析为Memmapped numpy [Total size = 2.5GB]

最后,事实证明,由于过高估计,最后10-15%的行都是零。现在因为我的计算性质,我需要从Memmapped numpy中删除这些无效行。优先级当然是时间,然后是内存

这可能是最好的方法吗? 我以编程方式知道要删除的行的确切索引

  1. 创建另一个具有正确形状和大小的Memmaped数组,将原始数组切割为此。
  2. 使用delete()功能
  3. 使用遮罩
  4. 别的什么?

1 个答案:

答案 0 :(得分:0)

You can use arr.base.resize截断或放大数组,然后arr.flush()将更改保存到磁盘:

In [169]: N = 10**6

In [170]: filename = '/tmp/test.dat'

In [171]: arr = np.memmap(filename, mode='w+', shape=(N,))

In [172]: arr.base.resize(N//2)

In [173]: arr.flush()

In [174]: arr = np.memmap(filename, mode='r')

In [175]: arr.shape
Out[175]: (500000,)

In [176]: arr.size == N//2
Out[176]: True