Предполагая, что координаты являются положительными целыми числами, и, особенно, когда диапазон координат небольшой, вы можете использовать accumarray
:
x1 = min(x);
y1 = min(y);
x2 = max(x);
y2 = max(y);
sz = [y2-y1+1, x2-x1+1];
ind = sub2ind(sz,y-y1+1, x-x1+1);
ifirst = accumarray(ind(:), 1:numel(ind), [], @min);
ilast = accumarray(ind(:), 1:numel(ind), [], @max);
Mfirst = ifirst(ind);
Mlast = ilast(ind);
Для более высоких диапазонов вы можете использовать параметр разреженного:
ifirst = accumarray(ind(:), 1:numel(ind), [], @min,[],1);
ilast = accumarray(ind(:), 1:numel(ind), [], @max,[],1);