AI-FANN
view release on metacpan or search on metacpan
PROTOTYPES: DISABLE
BOOT:
fann_set_error_log(0, 0);
void
_constants()
PREINIT:
unsigned int i;
PPCODE:
for (i = 0; my_constant_names[i]; i++) {
SV *sv = sv_2mortal(newSVpv(my_constant_names[i], 0));
SvUPGRADE(sv, SVt_PVIV);
SvUV_set(sv, my_constant_values[i]);
SvIOK_on(sv);
SvIsUV_on(sv);
XPUSHs(sv);
}
XSRETURN(i);
void
fann_print_parameters(self)
struct fann * self;
void
fann_cascade_activation_functions(self, ...)
struct fann *self;
PREINIT:
unsigned int count;
PPCODE:
if (items > 1) {
unsigned int i;
enum fann_activationfunc_enum * funcs;
count = items - 1;
Newx(funcs, items - 1, enum fann_activationfunc_enum);
SAVEFREEPV(funcs);
for (i = 0; i < count; i++) {
funcs[i] = _sv2fann_activationfunc_enum(ST(i+1));
}
fann_set_cascade_activation_functions(self, funcs, count);
else {
ST(0) = sv_2mortal(newSVuv(count));
XSRETURN(1);
}
void
fann_cascade_activation_steepnesses(self, ...)
struct fann *self;
PREINIT:
unsigned int count;
PPCODE:
if (items > 1) {
unsigned int i;
fann_type * steepnesses;
count = items - 1;
Newx(steepnesses, items - 1, fann_type);
SAVEFREEPV(steepnesses);
for (i = 0; i < count; i++) {
steepnesses[i] = SvNV(ST(i+1));
}
fann_set_cascade_activation_steepnesses(self, steepnesses, count);
_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");
( run in 1.679 second using v1.01-cache-2.11-cpan-71847e10f99 )