我有成千上万个具有不规则数据的文件,试图将其插值到同一网格中。数据存储在各个numpy
数组中,存储着许多不同的变量和时间。我一直在使用matplotlib.dates
通过将时间转换为数字来对时间进行插值。但是由于我不想外插丢失的数据,因此内插在数据集中引入了np.nan
值,这使得从matplotlib
日期到datetime
对象的转换变得棘手,因为我需要保存形状(即无法删除np.nans
),但是md.num2date
无法处理屏蔽的数组或np.nan
。
另一个库中是否存在另一个可以解释md.date2num
的命令,例如md.num2date
和nan
?还是这里唯一的解决方案是for
循环?
import numpy as np
import matplotlib.dates as md
tdata = np.array([np.nan, np.nan, 736926.9827155,736926.98274578,736926.98276768,736926.98285067,736926.9828712])
#Allows num2date to work but removes the nan values and won't conserve shape
test1 = md.num2date(tdata[~np.isnan(tdata)])
print(len(tdata),len(test1))
#Using a mask will produce an error
#test2 = md.num2date(np.ma.masked_array(tdata,np.isnan(tdata)))
请注意,我需要形状相同并且np.nan
可以出现在数组中的任何位置。我正在使用python 2.7
答案 0 :(得分:2)
也许是这样吗?
test1 = np.full_like(tdata, np.nan, dtype=object)
test1[~np.isnan(tdata)] = md.num2date(tdata[~np.isnan(tdata)])