Массив Numpy: обрезать NaN с одной стороны и прокладку с другой
Предположим, у меня есть пустой массив, который выглядит так:
test = np.array([[np.nan, np.nan, np.nan, 3., 4., np.nan],
[np.nan, np.nan, 5., 6., np.nan, np.nan]])
Я хотел бы обрезать NaN
s справа от числовых значений, но добавьте их слева, чтобы сохранить форму, т.е. результат должен выглядеть следующим образом:
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)
Тем не менее, это кажется мне странным, особенно потому что это вычислительно дорого (мой массив на самом деле намного больше) и может вызвать проблемы, когда в массиве есть фактические нули до обрезки. Есть идеи, что может быть умнее, чтобы получить тот же результат?