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.

Réponses (1)

Jan
Jan le 9 Mar 2011

1 vote

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.

Catégories

En savoir plus sur Data Type Identification dans Centre d'aide et File Exchange

Question posée :

le 9 Mar 2011

Community Treasure Hunt

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

Start Hunting!

Translated by