如果在其中任何一个中存在相同位置的nan,我想从两个数组中删除nans。阵列长度相同。这就是我在做的事情:
y = numpy.delete(y, numpy.where(numpy.isnan(x)))
numpy.delete(y, numpy.where(numpy.isnan(x)))
然而,这只有在x
是具有nan的情况下才有效。如果x
或y
具有nan?
答案 0 :(得分:1)
import numpy as np
import numpy.ma as ma
y = ma.masked_array(y, mask=~np.isnan(x))
y = y.compress() # y without nan where x has nan's
或者,在评论之后:
mask = ~np.isnan(x) & ~np.isnan(y)
y = ma.masked_array(y, mask=mask)
y = y.compress() # y without nan where x and y have nan's
x = ma.masked_array(x, mask=mask)
x = x.compress() # x without nan where x and y have nan's
或没有面具:
mask = ~np.isnan(x) & ~np.isnan(y)
y = y[mask]
x = x[mask]
答案 1 :(得分:1)
您必须跟踪要从两个阵列中删除的索引。您不需要where
,因为numpy
支持布尔索引(掩码)。此外,您不需要delete
,因为您可以获得数组的子集。
mask = ~np.isnan(x)
x = x[mask]
y = y[mask]
mask = ~np.isnan(y)
x = x[mask]
y = y[mask]
或更紧凑:
mask = ~np.isnan(x) & ~np.isnan(y)
x = x[mask]
y = y[mask]
如果数组很大,第一个实现只有一个优点,从较小的数组计算y
的掩码具有性能优势。一般来说,我会推荐第二种方法。