Avoid copy when slicing large vector

We know that MATLAB employs the copy-on-write mechanism for handling arrays. For example
a = zeros(10^6);
b = a; % Just a pointer assignment.
b = a(123:end); % Slicing causes b to copy values from a.
My question is, can I have something similar to b = a(123:end), but no copy is performed? My vector a is quite large (much larger than 10^6 elements), so slicing causes overhead. Can I create a C MEX-file that assign a pointer of a+123 to b and return the array without copying?
Thanks.

Respuestas (1)

Jan
Jan el 9 de Mzo. de 2011

1 voto

You can look into inplacecolumnmex.c of Bruno's http://www.mathworks.com/matlabcentral/fileexchange/23576-minmax-selection .
It works, but has a limited stability only: If the program stops with an error, before the arrays are freed, Matlab crashs due to a confused memory manager.
If you are familar with C-Mex files, implementing the functions operating on your intermediate arrays, would be much more reliable.

Categorías

Más información sobre Entering Commands en Centro de ayuda y File Exchange.

Preguntada:

el 9 de Mzo. de 2011

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by