У меня есть код C ++, который я периодически оцениваю для различных входных данных, свойства сети читаются из другого файла. Стоимость оценки высока b c повторного объявления и удаления переменных (мое предположение), любая идея о том, как ее уменьшить:
void NN_eval(Network *net, double rsq, double &Z)
{
double r;
int layer;
r = sqrt(rsq);
double *L_k, *L_kp;
L_k = new double [1];
L_kp = new double [net->archtwobody[1]];
for (int i = 0 ; i < net->archtwobody[1]; i++)
L_kp[i] = 0.0;
L_k[0] = -(r-cutmax)/cutmax;
int *A_size = new int [2];
for (layer = 0 ; layer < net->num_layertwobody+1; layer ++ ){
A_size[0] = net->archtwobody[layer]; A_size[1] = net->archtwobody[layer+1];
net->multiply(net->Wtwobody[layer], A_size, L_k, L_kp);
net->add_bias(net->btwobody[layer], A_size[1], L_kp);
net->apply_nonlinearity(net->functwobody[layer], L_kp, A_size[1]);
delete [] L_k;
L_k = new double [net->archtwobody[layer+1]];
for (int i = 0; i <net->archtwobody[layer+1]; i++) {
L_k[i] = L_kp[i];
}
delete [] L_kp;
if (layer != net->num_layertwobody){
L_kp = new double [net->archtwobody[layer+2]];
for (int i = 0 ; i < net->archtwobody[layer+2]; i++)
L_kp[i] = 0.0;
} else{
L_kp = new double [net->archtwobody[layer+1]];
for (int i = 0 ; i < net->archtwobody[layer+1]; i++)
L_kp[i] = 0.0;
}
}
Z = L_k[0]*net->fmax2;
delete [] L_k;
delete [] L_kp;
delete [] A_size;
}