2014-02-01 3 views
0

Я работаю над алгоритмом кластеризации kmeans, и мне нужно найти индекс наименьшего значения в массиве.Как получить индекс минимального значения в массиве?

Например, я написал этот код на 3 пункта:

if ((DistanceArray[1, j] < DistanceArray[2, j]) && 
    (DistanceArray[1, j] < DistanceArray[3, j])) 
{ 
    min= 1; 
} 
else if (DistanceArray[2, j] < DistanceArray[3, j]) 
{ 
    min= 2; 
} 
else 
{ 
    min= 3; 
} 

Но мне нужно, чтобы получить минимальное значение из многомерного массива.

Как это сделать?

ответ

1

Итерации над каждым значением и сравнить его с текущим минимумом. Объявите min как float.MaxValue, поэтому любое число, кроме максимального значения для float, будет меньше.

float min = float.MaxValue; //set 'min' to the maximum value of a float 
int minI, minJ; //use if you want to track indices of the min value 

for (int i = 0; i <= DistanceArray.GetUpperBound(0); i++) 
{ 
    for (int j = 0; j <= DistanceArray.GetUpperBound(1); i++) 
    { 
     if (DistanceArray[i, j] <= min) //changed to '<= min' to which means if 
     {        //there are multiple minimum values the 
      min = DistanceArray[i, j]; //one with the higher indices will be used 
      minI = i; 
      minJ = j; 
     } 
    } 
} 
+1

Почему вы делаете '<(DistanceArray.GetUpperBound (0) + 1)', когда вы могли бы просто сделать '<= DistanceArray.GetUpperBound (0) '? –

+1

Не инициализируйте min так, чтобы оно было нулевым. int - тип значения, он не может быть null, он будет иметь значение по умолчанию 0 –

+0

Я не был уверен, какой из них будет более ясным для OP. Я думаю, '<=', вероятно, будет выглядеть лучше, а? Я отредактирую его. – Matthew

0

Попробуйте, здесь обр есть два двумерный массив

int? minValue = null; 
    var i = 0; 
    var j = 0; 
    foreach (var m in arr) 
    { 
     var min1 = m.Min(); 
     if (minValue == null || minValue > min1) 
     { 
      minValue = min1; 
      i = m.ToList().IndexOf(min1); 
      j = arr.ToList().IndexOf(m); 
     } 

    } 
+0

-1 '.ToList(). IndexOf' кажется для меня крайне неэффективным. –

+0

Да, я знаю, но вложенный foreach для меня более неэффективен –

Смежные вопросы