块状阵列:在一侧修剪NaN,在另一侧填充

时间:2018-10-31 07:51:36

标签: arrays numpy padding trim

假设我有一个如下所示的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)

但是,这对我来说似乎很奇怪,尤其是因为它在计算上很昂贵(我的数组实际上更大),并且在修剪前数组中实际有零时可能会引起麻烦。知道有什么更聪明的方法来获得相同的结果吗?

0 个答案:

没有答案