`x` might be large ... so perhaps better to use `np.empty((len(x), 3))` and then `result.fill(np.nan)`