Как найти максимальное значение в симметричной матрице?

У меня есть симметричная матрица 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, как обычно.

Другие вопросы по тегам