loading .mat file causes problem with whos
John W. Eaton
jwe at octave.org
Tue Jun 23 06:54:57 CDT 2009
On 22-Jun-2009, Jason Cartwright wrote:
| Octave version 3.0.3 -- this is a precompiled binary
|
| Type of machine, operating system, and version number:
| OS Name Microsoft Windows XP Professional
| Version 5.1.2600 Service Pack 3 Build 2600
| System Manufacturer TOSHIBA
| System Model Satellite A205
| System Type X86-based PC
| Processor x86 Family 6 Model 15 Stepping 13 GenuineIntel ~1595 Mhz
| BIOS Version/Date Phoenix Technologies LTD 1.70, 11/6/2007
| SMBIOS Version 2.4
| Hardware Abstraction Layer Version = "5.1.2600.5574 (xpsp_sp3_qfe.080402-1256)"
| Total Physical Memory 1,024.00 MB
| Available Physical Memory 86.18 MB
| Total Virtual Memory 2.00 GB
| Available Virtual Memory 1.96 GB
| Page File Space 2.38 GB
|
| The problem is summarized as follows. When I load a .mat file, then I
| try to see which variables the .mat file contained using whos. When I
| run whos (or whos -variables) there is no output. Below I Illustrate
| the problem
|
| Using whos after .mat file has been loaded, assume the .mat file
| contains variables a and b
| > load 'matfile.mat'
| > whos
| >
|
| I have noticed two things. One, that whos only works for me
| sporadically. Two, if whos is working then invoking any sort of
| octave bug (as opposed to user error e.g. calling a function with
| incorrect args) then afterwards whos doesn't work.
|
| If you do need to access variables from a .mat file but don't know the
| variable names, such as to perform math with the variables, from a
| .mat file I do have a work around. Unfortunately this, for me, may
| also work sporadically due to other bugs. Basically you want to load
| the .mat file into a structure and find out the names of all the
| fields of the structure, these will be the variable names. Example
| code follows
|
| % assuming our file is called matfile.mat, and contains two variables
| a and b (but we don't know that)
| > S = load( 'matfile.mat' );
| % get the field names which are also the variable names
| > T = fieldnames( S );
| % assuming some sporadic bug doesn't prevent correct functioning, get
| the length of T
| > length( T )
| ans = 2
| % now we know there are 2 variables in matfile.mat, and can find out their names
| > T{ 1 } % outputs ans = 'a'
| ans = 'a'
| > T{ 2 } % outputs ans = 'b'
| ans = 'b'
| % we can now do math with the variables
|
| Note in my case some other bug is preventing me from seeing the
| fieldnames directly such as the correct operation of this code
|
| > S = load( 'matfile.mat' );
| > T = fieldnames( S )
| T = 'a'
| 'b'
|
| In summary, loading a .mat file is one action that invokes a bug.
| Also on my system whos only works sporadically. However, the
| invocation of this bug causes whos to function incorrectly ie with no
| output. It is likely that invoking any other bug will cause the same
| problem. However, if you need to know the names of variables from the
| .mat file and neither whos nor the fieldnames outputs don't work, then
| you may use the work around I've outlined above. The work around
| seems to work without fail...so far (fingers crossed).
|
| *footnote my variables are vectors with about 100k values
I'm unable to duplicate this problem with either Octave 3.2.0 or 3.0.5
on a Debian system. I'd suggest that you try Octave 3.2.0, which is
the current stable release. If the problem persists, then please send
another report.
jwe
More information about the Bug-octave
mailing list