1

私はそのような二重の非数値対称行列を持っています

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

C#のilnumerics関数でこれを行うにはどうすればよいですか?

4

1 に答える 1

2

結果へのより速い方法があるかもしれませんが、これはうまくいきます:

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 のサブクラスのコンテキストで実行されることが想定されていることに注意してください。

于 2013-10-02T10:53:11.073 に答える