假设我有一个如下所示的numpy数组:
test = np.array([[np.nan, np.nan, np.nan, 3., 4., np.nan],
[np.nan, np.nan, 5., 6., np.nan, np.nan]])
我想在数字值的右侧修整NaN
,但在左侧填充它们以保持形状,即结果应如下所示:
array([[nan, nan, nan, nan, 3., 4.],
[nan, nan, nan, nan, 5., 6.]])
我想它可以像这样工作:
def trim_and_pad(onedarray):
onedarray[np.isnan(onedarray)] = 0.
trimmed = np.trim_zeros(onedarray, trim='b')
padded = np.pad(trimmed, pad_width=(onedarray.size-trimmed.size, 0), mode='constant')
padded[padded == 0.] = np.nan
return padded
np.apply_along_axis(trim_and_pad, 1, test)
但是,这对我来说似乎很奇怪,尤其是因为它在计算上很昂贵(我的数组实际上更大),并且在修剪前数组中实际有零时可能会引起麻烦。知道有什么更聪明的方法来获得相同的结果吗?