从两个 Numpy 数组中删除相应的条目
Removing Corresponding Entries from Two Numpy Arrays
我很确定这是一个简单的问题,但我不太幸运能在网上找到解释。
我有一个通量值数组和一个相应的时间值数组。显然,这两个数组是一对一的(每个时间值对应一个通量值)。但是,我的一些通量值是 NaN。
我的问题是:当我从通量数组中删除NaN时,如何从时间数组中删除相应的值?
这些数组足够大(几千个条目),手工操作会非常麻烦。
您可以尝试布尔索引:
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]
我很确定这是一个简单的问题,但我不太幸运能在网上找到解释。
我有一个通量值数组和一个相应的时间值数组。显然,这两个数组是一对一的(每个时间值对应一个通量值)。但是,我的一些通量值是 NaN。
我的问题是:当我从通量数组中删除NaN时,如何从时间数组中删除相应的值?
这些数组足够大(几千个条目),手工操作会非常麻烦。
您可以尝试布尔索引:
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]