用C ++计算矢量的八度音阶分级丰度分布

时间:2016-05-10 16:59:03

标签: c++ r vector

我正在使用C ++来进行时间演化模拟。为了在每个步骤执行此操作,在longs矢量上执行一些函数

vector<long> population(popsize,1000);

并且每个设定的时间步长都将新矢量存储在矢量矢量中。

vector<vector<long>> populations; 

这是使用

完成的
    for( int a = 1; a <= generations; a = a + 1 )
    {
        generationstep.generationstep(population, selection_strength,mutation_rate);
        if (a % pop_interval == 0)
        populations.push_back(population);}

其中generationtep是一个函数,它接受向量和参数并在其上执行模拟步骤。

载体群包含一系列长链。其中一些出现多次,有些只出现一次。我想找到一种提取丰度分布的方法(即每个值出现的频率向量),而不是存储整个群体。然后我想将这些丰富值分成八度等级。在R中这很容易,我可以使用以下代码。

species_abundance_calculatore <- function(x){ # x is a vector equivalent to population vector in c++ code
    sortedtable <- sort(table(x[x > 0]),TRUE)
    speciesabundance <- as.vector(sortedtable) 
    loggedSA <- log2(speciesabundance)
    roundedSA <- floor(loggedSA)
    return(as.vector(table(factor(roundedSA, levels=0:max(roundedSA))))) # put into octave bins.}

然而,由于缺乏经验,我发现这在c ++中有些困难。理想情况下,我想在c ++中为这个函数构建一个等价的等价物,这样我就可以做到以下几点

for( int a = 1; a <= generations; a = a + 1 )
{
    generationstep.generationstep(population, selection_strength,mutation_rate);
    if (a % abundance_interval == 0)
    populations.push_back(species_abundance_calculator(population));}

任何有关如何执行此操作的指导将不胜感激。我理解这是一个很长的问题,并没有期待一个完整的答案,只是一些想法从哪里开始会有所帮助(如果/当我完成一个完整的解决方案时,我会更新)。

0 个答案:

没有答案