mat_min.cpp 839 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #include "mat_min.h"
  2. #include "verbose.h"
  3. template <typename T>
  4. IGL_INLINE void igl::mat_min(
  5. const Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic> & X,
  6. const int dim,
  7. Eigen::Matrix<T,Eigen::Dynamic,1> & Y,
  8. Eigen::Matrix<int,Eigen::Dynamic,1> & I)
  9. {
  10. assert(dim==1||dim==2);
  11. // output size
  12. int n = (dim==1?X.cols():X.rows());
  13. // resize output
  14. Y.resize(n);
  15. I.resize(n);
  16. // loop over dimension opposite of dim
  17. for(int j = 0;j<n;j++)
  18. {
  19. typename Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic>::Index PHONY;
  20. typename Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic>::Index i;
  21. T m;
  22. if(dim==1)
  23. {
  24. m = X.col(j).minCoeff(&i,&PHONY);
  25. }else
  26. {
  27. m = X.row(j).minCoeff(&PHONY,&i);
  28. }
  29. Y(j) = m;
  30. I(j) = i;
  31. }
  32. }
  33. #ifndef IGL_HEADER_ONLY
  34. // Explicit template specialization
  35. #endif