function selectedM = pair_idx(M,varargin) omitdim = []; indexingdim = []; dim_index = {}; for i = 1:length(varargin) if isempty(varargin{i}) omitdim(end+1) = i; else indexingdim(end+1) = i; dim_index{end+1}=varargin{i}; end end permute_order = [indexingdim,omitdim]; perM = permute(M,permute_order); perMsize = size(perM); indexingSize = perMsize(1:length(indexingdim)); omitSize = perMsize(length(indexingdim)+1:end); indexing_ind = sub2ind(indexingSize,dim_index{:}); reshape_perM = reshape(perM,prod(indexingSize),[]); reshape_selectedM = reshape_perM(indexing_ind,:); selectedM = reshape(reshape_selectedM,[size(reshape_selectedM,1),omitSize]); end