File Exchange

image thumbnail

VVAR class: a fast "virtual" variable class for MATLAB.

version 1.1 (7.12 KB) by

VVAR can be used to pre-allocate arrays much faster than using zeros

1 Download


View License

VVAR uses a pre-existing "scratch" file to store variables and can be used to pre-allocate a huge array much faster than using zeros. On a MacBook Pro with 64 bit MATLAB and 4Gb RAM, creating an 8Gb double array with VVAR was 100x faster than using zeros (1.24s vs 122.3s).
Upper limits on array size are system and MATLAB version dependent. See the MATLAB documenation.

Note that speed improvements are seen only when the array is too large for the available memory and forces virtual memory use.

With some caveats, VVAR instances can be used in much the same way as MATLAB primitive array types, e.g.
% x curently contains garbage (not zeros) so
%... fill x with data ...
% Then filter each column e.g.:
for k=1:size(x,2)
   x(:,k)=filtfilt(b, a, x(:,k));

A VVAR instance is simply a wrapper for the standard MATLAB memmapfile class that uses "nakhur" techniques to trick MATLAB into believing the VVAR instance is a MATLAB numeric matrix. This is achieved by having standard MATLAB methods return non-standard results. Effectively, the VVAR class instance pretends to be the primitive data that it represents so that the methods return results relevant to the contents of the instance not the instance itself e.g. with the instance above, isreal(x) returns true while size(x) returns [10000,10000]. Numel is not overloaded so numel(x) returns 1.
VVAR supports the full range of indexing options: subreferencing, linear and logical indexing etc.

Part of Project Waterloo from King's College London - see

Comments and Ratings (1)

amazing. looks quite unnoticed to me. yet: res_vec=vvar(100,100, 'logical'); throws an exception and NaN would be nice to have.



Minor improvements

MATLAB Release
MATLAB 7.6 (R2008a)

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video