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.

답변 (1개)

Jan
Jan 2011년 3월 9일

1 개 추천

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.

카테고리

도움말 센터File Exchange에서 Entering Commands에 대해 자세히 알아보기

질문:

2011년 3월 9일

Community Treasure Hunt

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

Start Hunting!

Translated by