Python:当内存受限时,使用NaNs删除行

时间:2014-05-27 21:40:52

标签: python arrays numpy pandas

我有3个numpy数组[A,B,C]它们都有相同的行数但列数不同。如果任何数组在该行上有一个nan或inf,我需要从所有数组中删除行。我需要使用尽可能少的内存。

例如,如果A的第一行有nan或inf,我需要删除A,B,C的第一行

我考虑将它们变成一个大熊猫数据框,然后使用dropna.But占用了大量的ram。

1 个答案:

答案 0 :(得分:3)

使用isfinite()sum(axis=-1)

import numpy as np

def random_with_nan_and_inf(shape, count):
    a = np.random.rand(*shape)
    idx = [np.random.randint(0, n, count) for n in shape]
    a[idx] = ([np.nan, np.inf] * count)[:count]
    return a

a = random_with_nan_and_inf((100, 3), 5)
b = random_with_nan_and_inf((100, 4), 10)
c = random_with_nan_and_inf((100, 5), 15)

mask = np.isfinite(a.sum(-1) + b.sum(-1) + c.sum(-1))
a2, b2, c2 = a[mask], b[mask], c[mask]