def regenerate_chunks(shape, chunks):
    """
    Regenerate new chunks based on given zarr chunks

    Parameters
    ----------
    shape : list/tuple
        the zarr shape
    chunks : list/tuple
        the original zarr chunks

    Returns
    -------
    list
        the regenerated new zarr chunks
    """
    # regenerate new chunks
    # NOTE currently make each chunk dimension to be its multiplier closest to 3000
    #   with a max chunksize of 3000
    new_chunks = map(
        lambda x: min(x[0], int(3000 / x[1]) * x[1] if x[1] < 3000 else 3000),
        zip(shape, chunks),
    )
    new_chunks = type(chunks)(list(new_chunks))

    # return new chunks
    return new_chunks