Как найти максимальное значение в симметричной матрице?
У меня есть симметричная матрица ilnumerics двойной, как это
100 90,38000 87,27000 44,23000 34,62000 30,77000
90,38000 100 90,91000 34,62000 44,23000 34,62000
87,27000 90,91000 100 36,36000 38,18000 47,27000
34,62000 44,23000 38,18000 89,80000 100 90,38000
30,77000 34,62000 47,27000 86,54000 90,38000 100
Я хочу найти максимальное значение. я использую
ILNumerics.ILRetArray<double> maxValue = ILNumerics.ILMath.maxall(matrixSimilarity);
Результат maxValue = 100. Я хочу получить результат, не принимая значения по диагонали => maxValue = 90,91
Как это сделать с помощью функции ilnumerics в C#?
1 ответ
Решение
Там могут быть более быстрые пути к результату, но это будет работать:
ILArray<double> E = counter(5, 5);
E сейчас:
<Double> [5,5]
[0]: 1 6 11 16 21
[1]: 2 7 12 17 22
[2]: 3 8 13 18 23
[3]: 4 9 14 19 24
[4]: 5 10 15 20 25
Скопируйте в новую переменную, измените диагональ и получите максимальное значение:
// make a copy of E
ILArray<double> maxE = E.C;
// set diagonal of the copy to smallest value
maxE[r(0,maxE.S[0]+1,numel(maxE)-1)] = minall(maxE);
// compute the max value
maxE = maxall(maxE);
>maxE
<Double> 24
Обратите внимание, что код, как ожидается, будет выполняться в контексте подкласса ILMath, как обычно.