public static Tuple <int, int, double> DenseMatrixAbsoluteMinimumPosition(DenseMatrix dm) { if (dm == null) { return(new Tuple <int, int, double>(0, 0, 0.0d)); } List <Tuple <int, double> > rowMinValues = new List <Tuple <int, double> >(); var rowEnum = dm.EnumerateRowsIndexed(); foreach (Tuple <int, Vector <double> > curRow in rowEnum) { DenseVector curDV = (DenseVector)curRow.Item2; rowMinValues.Add(new Tuple <int, double>(curDV.AbsoluteMinimumIndex(), curDV.AbsoluteMinimum())); } double minValue = rowMinValues.Min(tpl => tpl.Item2); int minValueRow = rowMinValues.FindIndex(tpl => tpl.Item2 == minValue); DenseVector minRow = (DenseVector)dm.Row(minValueRow); return(new Tuple <int, int, double>(minValueRow, minRow.AbsoluteMinimumIndex(), minValue)); }