(weights, indata, shape_in, shape_out)
return outdata
Apply regridding weights to data.

    Parameters
    ----------
    A : scipy sparse COO matrix

    indata : numpy array of shape ``(..., n_lat, n_lon)`` or ``(..., n_y, n_x)``.
        Should be C-ordered. Will be then tranposed to F-ordered.

    shape_in, shape_out : tuple of two integers
        Input/output data shape for unflatten operation.
        For rectilinear grid, it is just ``(n_lat, n_lon)``.

    Returns
    -------
    outdata : numpy array of shape ``(..., shape_out[0], shape_out[1])``.
        Extra dimensions are the same as `indata`.
        If input data is C-ordered, output will also be C-ordered.
Apply regridding weights to data.
Apply regridding weights to data .
def apply_weights(weights, indata, shape_in, shape_out):
    '''
    Apply regridding weights to data.

    Parameters
    ----------
    A : scipy sparse COO matrix

    indata : numpy array of shape ``(..., n_lat, n_lon)`` or ``(..., n_y, n_x)``.
        Should be C-ordered. Will be then tranposed to F-ordered.

    shape_in, shape_out : tuple of two integers
        Input/output data shape for unflatten operation.
        For rectilinear grid, it is just ``(n_lat, n_lon)``.

    Returns
    -------
    outdata : numpy array of shape ``(..., shape_out[0], shape_out[1])``.
        Extra dimensions are the same as `indata`.
        If input data is C-ordered, output will also be C-ordered.
    '''

    # COO matrix is fast with F-ordered array but slow with C-array, so we
    # take in a C-ordered and then transpose)
    # (CSR or CRS matrix is fast with C-ordered array but slow with F-array)
    if not indata.flags['C_CONTIGUOUS']:
        warnings.warn("Input array is not C_CONTIGUOUS. "
                      "Will affect performance.")

    # get input shape information
    shape_horiz = indata.shape[-2:]
    extra_shape = indata.shape[0:-2]

    assert shape_horiz == shape_in, (
        'The horizontal shape of input data is {}, different from that of'
        'the regridder {}!'.format(shape_horiz, shape_in)
        )

    assert shape_in[0] * shape_in[1] == weights.shape[1], (
        "ny_in * nx_in should equal to weights.shape[1]")

    assert shape_out[0] * shape_out[1] == weights.shape[0], (
        "ny_out * nx_out should equal to weights.shape[0]")

    # use flattened array for dot operation
    indata_flat = indata.reshape(-1, shape_in[0]*shape_in[1])
    outdata_flat = weights.dot(indata_flat.T).T

    # unflattened output array
    outdata = outdata_flat.reshape(
        [*extra_shape, shape_out[0], shape_out[1]])
    return outdata
def apply_weights ( weights , indata , shape_in , shape_out ) : # COO matrix is fast with F-ordered array but slow with C-array, so we # take in a C-ordered and then transpose) # (CSR or CRS matrix is fast with C-ordered array but slow with F-array) if not indata . flags [ 'C_CONTIGUOUS' ] : warnings . warn ( "Input array is not C_CONTIGUOUS. " "Will affect performance." ) # get input shape information shape_horiz = indata . shape [ - 2 : ] extra_shape = indata . shape [ 0 : - 2 ] assert shape_horiz == shape_in , ( 'The horizontal shape of input data is {}, different from that of' 'the regridder {}!' . format ( shape_horiz , shape_in ) ) assert shape_in [ 0 ] * shape_in [ 1 ] == weights . shape [ 1 ] , ( "ny_in * nx_in should equal to weights.shape[1]" ) assert shape_out [ 0 ] * shape_out [ 1 ] == weights . shape [ 0 ] , ( "ny_out * nx_out should equal to weights.shape[0]" ) # use flattened array for dot operation indata_flat = indata . reshape ( - 1 , shape_in [ 0 ] * shape_in [ 1 ] ) outdata_flat = weights . dot ( indata_flat . T ) . T # unflattened output array outdata = outdata_flat . reshape ( [ * extra_shape , shape_out [ 0 ] , shape_out [ 1 ] ] ) return outdata