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