pair_idx.m 690 B

1234567891011121314151617181920212223
  1. function selectedM = pair_idx(M,varargin)
  2. omitdim = [];
  3. indexingdim = [];
  4. dim_index = {};
  5. for i = 1:length(varargin)
  6. if isempty(varargin{i})
  7. omitdim(end+1) = i;
  8. else
  9. indexingdim(end+1) = i;
  10. dim_index{end+1}=varargin{i};
  11. end
  12. end
  13. permute_order = [indexingdim,omitdim];
  14. perM = permute(M,permute_order);
  15. perMsize = size(perM);
  16. indexingSize = perMsize(1:length(indexingdim));
  17. omitSize = perMsize(length(indexingdim)+1:end);
  18. indexing_ind = sub2ind(indexingSize,dim_index{:});
  19. reshape_perM = reshape(perM,prod(indexingSize),[]);
  20. reshape_selectedM = reshape_perM(indexing_ind,:);
  21. selectedM = reshape(reshape_selectedM,[size(reshape_selectedM,1),omitSize]);
  22. end