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

У меня есть симметричная матрица чисел типа double

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 #?


person LeMoussel    schedule 02.10.2013    source источник
comment
Следите за объявлением вашей переменной. В основном вы будете использовать только ILArray ‹T›. ILRetArray используется только в объявлениях функций. См .: ilnumerics.net/GeneralRules.html   -  person Haymo Kutschbach    schedule 02.10.2013


Ответы (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, как обычно.

person Haymo Kutschbach    schedule 02.10.2013