AI-FANN
view release on metacpan or search on metacpan
struct fann_train_data *
fann_train_data_new_empty(klass, num_data, num_input, num_output)
SV *klass;
unsigned int num_data;
unsigned int num_input;
unsigned int num_output;
CODE:
RETVAL = fann_train_data_create(num_data, num_input, num_output);
OUTPUT:
RETVAL
CLEANUP:
_check_error(aTHX_ (struct fann_error *)RETVAL);
void
fann_train_data_data(self, index, ...)
struct fann_train_data *self;
unsigned int index;
PREINIT:
AV *input;
AV *output;
unsigned int i;
PPCODE:
if (index >= self->num_data)
Perl_croak(aTHX_"index %d is out of range", index);
switch (items) {
case 4:
input = _srv2av(aTHX_ ST(2), self->num_input, "input");
for (i = 0; i < self->num_input; i++) {
SV **svp = av_fetch(input, i, 0);
self->input[index][i] = SvNV(svp ? *svp : &PL_sv_undef);
}
output = _srv2av(aTHX_ ST(3), self->num_output, "output");
for (i = 0; i < self->num_output; i++) {
SV **svp = av_fetch(output, i, 0);
self->output[index][i] = SvNV(svp ? *svp : &PL_sv_undef);
}
case 2:
if (GIMME_V == G_ARRAY) {
input = newAV();
output = newAV();
av_extend(input, self->num_input - 1);
av_extend(output, self->num_output - 1);
for (i = 0; i < self->num_input; i++) {
SV *sv = newSVnv(self->input[index][i]);
av_store(input, i, sv);
}
for (i = 0; i < self->num_output; i++) {
SV *sv = newSVnv(self->output[index][i]);
av_store(output, i, sv);
}
ST(0) = sv_2mortal(newRV_inc((SV*)input));
ST(1) = sv_2mortal(newRV_inc((SV*)output));
XSRETURN(2);
}
else {
ST(0) = &PL_sv_yes;
XSRETURN(1);
}
break;
default:
Perl_croak(aTHX_ "Usage: AI::FANN::TrainData::data(self, index [, input, output])");
}
struct fann_train_data *
fann_train_data_new(klass, input, output, ...)
SV *klass;
AV *input;
AV *output;
PREINIT:
unsigned int num_data;
unsigned int num_input;
unsigned int num_output;
unsigned int i;
CODE:
if (!(items & 1)) {
Perl_croak(aTHX_ "wrong number of arguments in constructor");
}
num_data = items >> 1;
num_input = av_len(input) + 1;
if (!num_input)
Perl_croak(aTHX_ "input array is empty");
num_output = av_len(output) + 1;
if (!num_output)
Perl_croak(aTHX_ "output array is empty");
RETVAL = fann_train_data_create(num_data, num_input, num_output);
OUTPUT:
RETVAL
CLEANUP:
_check_error(aTHX_ (struct fann_error *)RETVAL);
/* we do that at cleanup to ensure that the just created object is
* freed if we croak */
if (RETVAL) {
for (i = 0; i < num_data; i++) {
unsigned int j;
input = _srv2av(aTHX_ ST(1 + i * 2), num_input, "input");
for (j = 0; j < num_input; j++) {
SV **svp = av_fetch(input, j, 0);
RETVAL->input[i][j] = SvNV(svp ? *svp : &PL_sv_undef);
}
output = _srv2av(aTHX_ ST(2 + i * 2), num_output, "output");
for (j = 0; j < num_output; j++) {
SV **svp = av_fetch(output, j, 0);
RETVAL->output[i][j] = SvNV(svp ? *svp : &PL_sv_undef);
}
}
}
void
fann_train_data_DESTROY(self)
struct fann_train_data * self;
CODE:
fann_destroy_train(self);
sv_unmagic(SvRV(ST(0)), '~');
void
fann_train_data_shuffle(self)
struct fann_train_data *self;
CLEANUP:
_check_error(aTHX_ (struct fann_error *)self);
( run in 0.557 second using v1.01-cache-2.11-cpan-437f7b0c052 )