PRTools for Octave
As Octave is a public domain Matlab clone, PRTools might run on it. At this moment there is a trial version that can be obtained from here. Users are encourage to try it and send me comments. Below is a number of remarks on Octave bugs that had to be solved and changes that appeared to be necessary.
The new command isoctave
, included in PRTools, is used to switch between statements that can be handled by Matlab and the Octave replacements
The implementation of object oriented classes in Octave generated some problems. The major one is that the superiorto
command that defines the class that handles operations between different classes is in error under Octave. Processing ends up in the wrong class. In particular this holds for the prmapping
class. As no solution could be found to call one set of operator overlays from within another set of operator overlays, code had to be duplicated, mainly for the mtimes
operator.
Some Octave commands in the optim and image toolboxes/packages used by PRTools are different from the Matlab ones or use options that are not available. In the following PRTools commands adaptations had to be made for the Octave usage: im_skel
, nu_svro
(called by nusvr
), nusvo
(called by nusvc
), svo
(called by svc
), plotc
, plotm
, scattern
, regoptc
(called by all classifier regularization procedures). Consequently optimization results and images will differ.
The systems of random number generators differ. The PRTools command randreset
that saves and returns seeds had to be adapted for Octave. It is not yet fully tested whether the solution is sufficient for all places where it is used. PRTools tries to preserve seeds that are set by the user avoiding changes caused by internal calls to random number generators, e.g. for cross-validation.
Octave appears to be less flexible than Matlab w.r.t. finding files in the search path. E.g. files with another extension than .m and .mat may not be found or generate a warning.
Octave is more strict in handling data classes. E.g. Matlab accepts sometimes a cellstring where a character string is expected where Octave generates an error. In addition, Matlab accepts without complaining an empty double ([]
) in concatenating strings, while Octave generates a warning.
PRTools includes interfaces with Matlab functions, in particular with Matlab classifiers, in order to facilitate comparisons. Examples are statsdtc
, statsknnc
and statslinc
that integrate the decision tree classifier, the nearest neighbor rule and the linear classifier in the PRTools system. These are obviously not available under Octave.
Octave has not a active neural network toolbox. There is an old nnet-package that is not maintained and very limited. Consequently the PRTools classifiers rnbc
, lmnc
, bpxnc
, neurc
and rnnc
cannot be called.
Octave is sometimes considerably slower than Matlab. PRTools has a system to control optimization iterations called prtime
. By default iterations stop after 10 seconds (adaptable by the user). Users may consider to change this to. e.g. 25 seconds to get comparable results.
A very annoying property of Octave is that structures list on the CLI the contents of all fields. Consequently it is not feasible to inspect a PRTools dataset A by struct(A)
as it will list the entire dataset on the screen. This is now solved by adding a function struct_octave
that simulates the Matlab struct
. It is called automatically by struct(X)
if X
is a variable of one of the PRTools classes.
Remarks are welcome.
Bob Duin, March 18, 2018