Python autograd.numpy.cumsum() Examples

The following are 14 code examples of autograd.numpy.cumsum(). You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may also want to check out all available functions/classes of the module autograd.numpy , or try the search function .
Example #1
Source File: demo_utils.py    From momi2 with GNU General Public License v3.0 6 votes vote down vote up
def simple_admixture_3pop(x=None):
    if x is None:
        x = np.random.normal(size=7)
    t = np.cumsum(np.exp(x[:5]))
    p = 1.0 / (1.0 + np.exp(x[5:]))

    model = momi.DemographicModel(1., .25)
    model.add_leaf("b")
    model.add_leaf("a")
    model.add_leaf("c")
    model.move_lineages("a", "c", t[1], p=1.-p[1])
    model.move_lineages("a", "d", t[0], p=1.-p[0])
    model.move_lineages("c", "d", t[2])
    model.move_lineages("d", "b", t[3])
    model.move_lineages("a", "b", t[4])
    return model 
Example #2
Source File: demo_utils.py    From momi2 with GNU General Public License v3.0 5 votes vote down vote up
def simple_admixture_demo(x=np.random.normal(size=7)):
    t = np.cumsum(np.exp(x[:5]))
    p = 1.0 / (1.0 + np.exp(x[5:]))

    ret = momi.DemographicModel(1., .25)
    ret.add_leaf("b")
    ret.add_leaf("a")
    ret.move_lineages("a", 2, t[1], p=1.-p[1])
    ret.move_lineages("a", 3, t[0], p=1.-p[0])
    ret.move_lineages(2, 3, t[2])
    ret.move_lineages(3, "b", t[3])
    ret.move_lineages("a", "b", t[4])
    return ret 
Example #3
Source File: variational_smc.py    From variational-smc with MIT License 5 votes vote down vote up
def resampling(w, rs):
    """
    Stratified resampling with "nograd_primitive" to ensure autograd 
    takes no derivatives through it.
    """
    N = w.shape[0]
    bins = np.cumsum(w)
    ind = np.arange(N)
    u = (ind  + rs.rand(N))/N
    
    return np.digitize(u, bins) 
Example #4
Source File: geometry.py    From AeroSandbox with MIT License 5 votes vote down vote up
def get_downsampled_mcl(self, mcl_fractions):
        # Returns the mean camber line in downsampled form

        mcl = self.mcl_coordinates
        # Find distances along mcl, assuming linear interpolation
        mcl_distances_between_points = np.sqrt(
            np.power(mcl[:-1, 0] - mcl[1:, 0], 2) +
            np.power(mcl[:-1, 1] - mcl[1:, 1], 2)
        )
        mcl_distances_cumulative = np.hstack((0, np.cumsum(mcl_distances_between_points)))
        mcl_distances_cumulative_normalized = mcl_distances_cumulative / mcl_distances_cumulative[-1]

        mcl_downsampled_x = np.interp(
            x=mcl_fractions,
            xp=mcl_distances_cumulative_normalized,
            fp=mcl[:, 0]
        )
        mcl_downsampled_y = np.interp(
            x=mcl_fractions,
            xp=mcl_distances_cumulative_normalized,
            fp=mcl[:, 1]
        )

        mcl_downsampled = np.column_stack((mcl_downsampled_x, mcl_downsampled_y))

        return mcl_downsampled 
Example #5
Source File: geometry.py    From AeroSandbox with MIT License 5 votes vote down vote up
def repanel_current_airfoil(self, n_points_per_side=100):
        # Returns a repaneled version of the airfoil with cosine-spaced coordinates on the upper and lower surfaces.
        # Inputs:
        #   # n_points_per_side is the number of points PER SIDE (upper and lower) of the airfoil. 100 is a good number.
        # Notes: The number of points defining the final airfoil will be n_points_per_side*2-1,
        # since one point (the leading edge point) is shared by both the upper and lower surfaces.

        upper_original_coors = self.upper_coordinates()  # Note: includes leading edge point, be careful about duplicates
        lower_original_coors = self.lower_coordinates()  # Note: includes leading edge point, be careful about duplicates

        # Find distances between coordinates, assuming linear interpolation
        upper_distances_between_points = np.sqrt(
            np.power(upper_original_coors[:-1, 0] - upper_original_coors[1:, 0], 2) +
            np.power(upper_original_coors[:-1, 1] - upper_original_coors[1:, 1], 2)
        )
        lower_distances_between_points = np.sqrt(
            np.power(lower_original_coors[:-1, 0] - lower_original_coors[1:, 0], 2) +
            np.power(lower_original_coors[:-1, 1] - lower_original_coors[1:, 1], 2)
        )
        upper_distances_from_TE = np.hstack((0, np.cumsum(upper_distances_between_points)))
        lower_distances_from_LE = np.hstack((0, np.cumsum(lower_distances_between_points)))
        upper_distances_from_TE_normalized = upper_distances_from_TE / upper_distances_from_TE[-1]
        lower_distances_from_LE_normalized = lower_distances_from_LE / lower_distances_from_LE[-1]

        # Generate a cosine-spaced list of points from 0 to 1
        s = cosspace(n_points=n_points_per_side)

        x_upper_func = sp_interp.PchipInterpolator(x=upper_distances_from_TE_normalized, y=upper_original_coors[:, 0])
        y_upper_func = sp_interp.PchipInterpolator(x=upper_distances_from_TE_normalized, y=upper_original_coors[:, 1])
        x_lower_func = sp_interp.PchipInterpolator(x=lower_distances_from_LE_normalized, y=lower_original_coors[:, 0])
        y_lower_func = sp_interp.PchipInterpolator(x=lower_distances_from_LE_normalized, y=lower_original_coors[:, 1])

        x_coors = np.hstack((x_upper_func(s), x_lower_func(s)[1:]))
        y_coors = np.hstack((y_upper_func(s), y_lower_func(s)[1:]))

        coordinates = np.column_stack((x_coors, y_coors))
        self.coordinates = coordinates 
Example #6
Source File: test_numpy.py    From autograd with MIT License 5 votes vote down vote up
def test_cumsum_axis0():
    def fun(x): return np.cumsum(x, axis=0)
    mat = npr.randn(10, 11)
    check_grads(fun)(mat) 
Example #7
Source File: test_numpy.py    From autograd with MIT License 5 votes vote down vote up
def test_cumsum_axis1():
    def fun(x): return np.cumsum(x, axis=1)
    mat = npr.randn(10, 11)
    check_grads(fun)(mat) 
Example #8
Source File: test_numpy.py    From autograd with MIT License 5 votes vote down vote up
def test_cumsum_1d():
    def fun(x): return np.cumsum(x)
    mat = npr.randn(10)
    check_grads(fun)(mat) 
Example #9
Source File: test_numpy.py    From autograd with MIT License 5 votes vote down vote up
def test_cumsum_no_axis():
    def fun(x): return np.cumsum(x)
    mat = npr.randn(10, 11)
    check_grads(fun)(mat) 
Example #10
Source File: autoptim.py    From autoptim with MIT License 5 votes vote down vote up
def _split(x, shapes):
    x_split = np.split(x, np.cumsum([np.prod(shape) for shape in shapes[:-1]]))
    optim_vars = [var.reshape(*shape) for (var, shape) in zip(x_split, shapes)]
    return optim_vars 
Example #11
Source File: demo_utils.py    From momi2 with GNU General Public License v3.0 4 votes vote down vote up
def simple_five_pop_demo(x=np.random.normal(size=30)):
    assert len(x) == 30
    # make all params positive
    x = np.exp(x)

    # # allow negative growth rates
    # for i in range(15,20):
    #     x[i] = np.log(x[i])
    # # make times increasing
    # for i in range(1,15):
    #     x[i] = x[i] + x[i-1]

    t = np.cumsum(x[:15])
    # allow negative growth rates
    g = np.log(x[15:20])

    model = momi.DemographicModel(1.0, .25)
    for pop in range(1, 6):
        model.add_leaf(pop)
    model.set_size(5, t[0], g=g[0])
    model.set_size(4, t[1], g=g[1])
    model.set_size(3, t[2], g=g[2])
    model.set_size(2, t[3], g=g[3])
    model.set_size(1, t[4], g=g[4])
    model.move_lineages(5, 4, t=t[5], N=x[20])
    model.set_size(3, t=t[6], N=x[21])
    model.set_size(2, t=t[7], N=x[22])
    model.set_size(1, t[8], N=x[23])
    model.move_lineages(4, 3, t[9], N=x[24])
    model.set_size(2, t[10], N=x[25])
    model.set_size(1, t[11], N=x[26])
    model.move_lineages(3, 2, t[12], N=x[27])
    model.set_size(1, t[13], N=x[28])
    model.move_lineages(2, 1, t[14], N=x[29])
    return model
    ## number of edges is 2n-1
    #events_list = [('-eg', t[0], 5, g[0]),
    #               ('-eg', t[1], 4, g[1]),
    #               ('-eg', t[2], 3, g[2]),
    #               ('-eg', t[3], 2, g[3]),
    #               ('-eg', t[4], 1, g[4]),
    #               ('-ej', t[5], 5, 4), ('-en', t[5], 4, x[20]),
    #               ('-en', t[6], 3, x[21]),
    #               ('-en', t[7], 2, x[22]),
    #               ('-en', t[8], 1, x[23]),
    #               ('-ej', t[9], 4, 3), ('-en', t[9], 3, x[24]),
    #               ('-en', t[10], 2, x[25]),
    #               ('-en', t[11], 1, x[26]),
    #               ('-ej', t[12], 3, 2), ('-en', t[12], 2, x[27]),
    #               ('-en', t[13], 1, x[28]),
    #               ('-ej', t[14], 2, 1), ('-en', t[14], 1, x[29])]
    #demo = make_demo_hist(events_list, sampled_pops=list(
    #    range(1, len(n_lins) + 1)), sampled_n=n_lins)
    ##demo = make_demography(events_list, sampled_pops = list(range(1,len(n_lins)+1)), sampled_n = n_lins)
    ##demo = demo.rescaled(1e4)
    #return demo 
Example #12
Source File: variational_smc.py    From variational-smc with MIT License 4 votes vote down vote up
def sim_q(prop_params, model_params, y, smc_obj, rs, verbose=False):
    """
    Simulates a single sample from the VSMC approximation.

    Requires an SMC object with 2 member functions:
    -- sim_prop(t, x_{t-1}, y, prop_params, model_params, rs)
    -- log_weights(t, x_t, x_{t-1}, y, prop_params, model_params)
    """
    # Extract constants
    T = y.shape[0]
    Dx = smc_obj.Dx
    N = smc_obj.N

    # Initialize SMC
    X = np.zeros((N,T,Dx))
    logW = np.zeros(N)
    W = np.zeros((N,T))
    ESS = np.zeros(T)

    for t in range(T):
        # Resampling
        if t > 0:
            ancestors = resampling(W[:,t-1], rs)
            X[:,:t,:] = X[ancestors,:t,:]

        # Propagation
        X[:,t,:] = smc_obj.sim_prop(t, X[:,t-1,:], y, prop_params, model_params, rs)

        # Weighting
        logW = smc_obj.log_weights(t, X[:,t,:], X[:,t-1,:], y, prop_params, model_params)
        max_logW = np.max(logW)
        W[:,t] = np.exp(logW-max_logW)
        W[:,t] /= np.sum(W[:,t])
        ESS[t] = 1./np.sum(W[:,t]**2)

    # Sample from the empirical approximation
    bins = np.cumsum(W[:,-1])
    u = rs.rand()
    B = np.digitize(u,bins)

    if verbose:
        print('Mean ESS', np.mean(ESS)/N)
        print('Min ESS', np.min(ESS))
        
    return X[B,:,:] 
Example #13
Source File: geometry.py    From AeroSandbox with MIT License 4 votes vote down vote up
def get_repaneled_airfoil(self, n_points_per_side=100):
        # Returns a repaneled version of the airfoil with cosine-spaced coordinates on the upper and lower surfaces.
        # Inputs:
        #   # n_points_per_side is the number of points PER SIDE (upper and lower) of the airfoil. 100 is a good number.
        # Notes: The number of points defining the final airfoil will be n_points_per_side*2-1,
        # since one point (the leading edge point) is shared by both the upper and lower surfaces.

        upper_original_coors = self.upper_coordinates()  # Note: includes leading edge point, be careful about duplicates
        lower_original_coors = self.lower_coordinates()  # Note: includes leading edge point, be careful about duplicates

        # Find distances between coordinates, assuming linear interpolation
        upper_distances_between_points = np.sqrt(
            np.power(upper_original_coors[:-1, 0] - upper_original_coors[1:, 0], 2) +
            np.power(upper_original_coors[:-1, 1] - upper_original_coors[1:, 1], 2)
        )
        lower_distances_between_points = np.sqrt(
            np.power(lower_original_coors[:-1, 0] - lower_original_coors[1:, 0], 2) +
            np.power(lower_original_coors[:-1, 1] - lower_original_coors[1:, 1], 2)
        )
        upper_distances_from_TE = np.hstack((0, np.cumsum(upper_distances_between_points)))
        lower_distances_from_LE = np.hstack((0, np.cumsum(lower_distances_between_points)))
        upper_distances_from_TE_normalized = upper_distances_from_TE / upper_distances_from_TE[-1]
        lower_distances_from_LE_normalized = lower_distances_from_LE / lower_distances_from_LE[-1]

        # Generate a cosine-spaced list of points from 0 to 1
        s = cosspace(n_points=n_points_per_side)

        x_upper_func = sp_interp.PchipInterpolator(x=upper_distances_from_TE_normalized, y=upper_original_coors[:, 0])
        y_upper_func = sp_interp.PchipInterpolator(x=upper_distances_from_TE_normalized, y=upper_original_coors[:, 1])
        x_lower_func = sp_interp.PchipInterpolator(x=lower_distances_from_LE_normalized, y=lower_original_coors[:, 0])
        y_lower_func = sp_interp.PchipInterpolator(x=lower_distances_from_LE_normalized, y=lower_original_coors[:, 1])

        x_coors = np.hstack((x_upper_func(s), x_lower_func(s)[1:]))
        y_coors = np.hstack((y_upper_func(s), y_lower_func(s)[1:]))

        coordinates = np.column_stack((x_coors, y_coors))

        # Make a new airfoil with the coordinates
        name = self.name + ", repaneled to " + str(n_points_per_side) + " pts"
        new_airfoil = Airfoil(name=name, coordinates=coordinates, repanel=False)

        return new_airfoil 
Example #14
Source File: tm.py    From autohmm with BSD 2-Clause "Simplified" License 4 votes vote down vote up
def sample(self, n_samples=2000, observed_states=None, random_state=None):
        """Generate random samples from the self.

        Parameters
        ----------
        n : int
            Number of samples to generate.

        observed_states : array
            If provided, states are not sampled.

        random_state: RandomState or an int seed
            A random number generator instance. If None is given, the
            object's random_state is used

        Returns
        -------
        samples : array_like, length (``n_samples``, ``n_features``)
                  List of samples

        states : array_like, shape (``n_samples``)
                 List of hidden states (accounting for tied states by giving
                 them the same index)
        """

        if random_state is None:
            random_state = self.random_state
        random_state = check_random_state(random_state)

        samples = np.zeros((n_samples, self.n_features))
        states = np.zeros(n_samples)

        if observed_states is None:
            startprob_pdf = np.exp(np.copy(self._log_startprob))
            startdist = stats.rv_discrete(name='custm',
                                      values=(np.arange(startprob_pdf.shape[0]),
                                                        startprob_pdf),
                                      seed=random_state)
            states[0] = startdist.rvs(size=1)[0]

            transmat_pdf = np.exp(np.copy(self._log_transmat))
            transmat_cdf = np.cumsum(transmat_pdf, 1)

            nrand = random_state.rand(n_samples)
            for idx in range(1,n_samples):
                newstate = (transmat_cdf[int(states[idx-1])] > nrand[idx-1]).argmax()
                states[idx] = newstate

        else:
            states = observed_states

        mu = np.copy(self._mu_)
        precision = np.copy(self._precision_)
        for idx in range(n_samples):
            mean_ = mu[states[idx]]

            covar_ = np.linalg.inv(precision[states[idx]])
            samples[idx] = multivariate_normal.rvs(mean=mean_, cov=covar_,
                                                   random_state=random_state)
        states = self._process_sequence(states)
        return samples, states