从两个Numpy数组中删除相应的条目

时间:2015-01-01 23:59:47

标签: python arrays numpy

我有一个我非常确定的简单问题,但我没有太多运气在网上找到解释。

我有一系列通量值和相应的时间值数组。显然,这两个数组是一对一的(每个时间值一个通量值)。但是,我的一些通量值是NaN。

我的问题是:当我从焊剂阵列中移除NaN时,如何从时间数组中删除相应的值?

这些数组足够大(数千个条目),手工操作会非常麻烦。

1 个答案:

答案 0 :(得分:4)

您可以尝试布尔索引:

In [13]: time
Out[13]: array([  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.])

In [15]: flux
Out[15]: array([  1.,   1.,   1.,   1.,   1.,  nan,  nan,  nan,   1.,   1.,   1.])


In [16]: time2 = time[~np.isnan(flux)]
In [17]: flux2 = flux[~np.isnan(flux)]  
In [18]: time2
Out[18]: array([  0.,   1.,   2.,   3.,   4.,   8.,   9.,  10.])

In [19]: flux2
Out[19]: array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])

如果您不再需要原始数组,只需编写time = time[~np.isnan(flux)]等。

更复杂的方法是使用masked arrays

In [20]: m = np.ma.masked_invalid(flux)
In [21]: time2 = time[~m.mask]
In [22]: time2
Out[22]: array([  0.,   1.,   2.,   3.,   4.,   8.,   9.,  10.])

In [23]: flux2
Out[23]: array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])
In [22]: flux2 = flux[~m.mask]