我有3个numpy数组[A,B,C]它们都有相同的行数但列数不同。如果任何数组在该行上有一个nan或inf,我需要从所有数组中删除行。我需要使用尽可能少的内存。
例如,如果A的第一行有nan或inf,我需要删除A,B,C的第一行
我考虑将它们变成一个大熊猫数据框,然后使用dropna.But占用了大量的ram。
答案 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]