public Double columnMin(int col) {
        if (!isContinuous(col)) {
            throw new MLException("Cannot calculate the min of a non-continuous column");
        }
        boolean allUnknownValues = true;
        Double min = Double.MAX_VALUE;
        for (List<Double> row : data) {
            double val = row.get(col);
            if (val != UNKNOWN_VALUE) {
                allUnknownValues = false;
                min = min < val ? min : val;
            }
        }
        if (allUnknownValues) {
            return UNKNOWN_VALUE;
        }
        return min;
    }