@numba.jit(nopython=True)
def _numba_mean_by_cell(zw_cell, ww_cell, varw_cell, nn_cell, z, w):
    if (w.size == 1):
        zw = np.nansum(np.concatenate((z, np.array([zw_cell]))))
        ww = nn_cell
        varw = np.nansum(np.concatenate((((z - (zw / nn_cell)) ** 2), np.array([varw_cell]))))
    else:
        zw = np.nansum(np.append(zw_cell, (z * w)))
        ww = np.nansum(np.append(ww_cell, w))
        varw = np.nansum(np.append(((z - (zw_cell / ww_cell)) ** 2), varw_cell))
    return (zw, ww, varw)
@numba.jit(nopython=True)
def _numba_mean_by_cell(zw_cell, ww_cell, varw_cell, nn_cell, z, w):
    if (w.size == 1):
        zw = np.nansum(np.concatenate((z, np.array([zw_cell]))))
        ww = nn_cell
        varw = np.nansum(np.concatenate((((z - (zw / nn_cell)) ** 2), np.array([varw_cell]))))
    else:
        zw = np.nansum(np.append(zw_cell, (z * w)))
        ww = np.nansum(np.append(ww_cell, w))
        varw = np.nansum(np.append(((z - (zw_cell / ww_cell)) ** 2), varw_cell))
    return (zw, ww, varw)