function inds = FindRepeatAlongDims(in,dim)
% find repeated rows or columns in a matrix.
% inds = FindRepeatAlongDims(in,dim)
% example:
% in =
% 1 2 3
% 2 3 4
% 4 5 6
% 1 2 3
% 1 2 3
% 4 5 6
% FindRepeatAlongDims(in,1) % check for repeated rows
% ans =
% 5 % the fifth row is the same as the fourth row,
% repeat!
%
% for N-D dimensions, this function can also find repeats along the highest
% dimension, such as finding repeated planes in a 3D matrix.
% 04-02-09 DN Wrote it.
psychassert(dim>0 && dim<=ndims(in),'dim input argument outside possible range (1:ndims(in)')
if ndims(in)>2
psychassert(dim==ndims(in),'if input has more than 2 dimensions, repetitions can only be found along the highest dimension')
end
thediff = diff(in,[],dim);
if dim==1 && ndims(in)==2
thediff = thediff.';
else
nrows = prod(AltSize(thediff,1:dim-1));
rest = num2cell(AltSize(thediff,dim:ndims(thediff)));
thediff = reshape(thediff,nrows,rest{:});
end
thesum = sum(thediff,1);
if isvector(thesum)
% if we test over the highest dimension, thesum will always be a vector
% and we can simply return the indices to doubles in that highest
% dimension
inds = find(thesum==0)+1;
end