如何找到最小数组(局部最小值图形)

时间:2014-01-26 01:49:51

标签: php math graphics

我需要找到最小的图形。

代码:

$mindots = array();

for ($i = 0; $i<=sizeof($chart); $i++  ) {
    if ( $chart[$i] >=0  ) { 
        $mindots[1] = $i;
        if ($chart[$i+1] >= $chart[$i] && $chart[$i+2] >= $chart[$i] ) {
            break;
        }
    }   
}

for ($i = $mindots[1]+2; $i<=sizeof($chart); $i++  ) {
    if ( $chart[$i] >=0  ) { 
        $mindots[2] = $i;
        if ($chart[$i+1] >= $chart[$i] && $chart[$i+2] >= $chart[$i]) {
            break;
        }
    }   
}

for ($i = $mindots[2]+2; $i<=sizeof($chart); $i++  ) {
    if ( $chart[$i] >=0 ) { 
        $mindots[3] = $i;
        if ($chart[$i+1] >= $chart[$i] && $chart[$i+2] >= $chart[$i] ) {
            break;
        }
    }   
}

在这里你可以看到图形: enter image description here

结果我有:

array(3) { [1]=> int(0) [2]=> int(6) [3]=> int(8) }

但我需要像~6 22 36这样的数字。

我的图表大小(x coord max)在35-45麻木范围内。

我的价值观:

0.0;2.0
1.0;4.0
2.0;16.0
3.0;18.0
4.0;7.0
5.0;4.0
6.0;2.0
7.0;2.0
8.0;5.0
9.0;7.0
10.0;10.0
11.0;10.0
12.0;12.0
13.0;7.0
14.0;5.0
15.0;9.0
16.0;10.0
17.0;11.0
18.0;12.0
19.0;6.0
20.0;2.0
21.0;0.0
22.0;2.0
23.0;6.0
24.0;11.0
25.0;11.0
26.0;12.0
27.0;11.0
28.0;6.0
29.0;7.0
30.0;11.0
31.0;10.0
32.0;11.0
33.0;10.0
34.0;2.0
35.0;0.0
36.0;0.0
37.0;2.0
38.0;4.0
39.0;14.0
40.0;15.0
41.0;7.0
42.0;4.0

或以数组形式(打印)

Array ( [0] => 2 [1] => 4 [2] => 16 [3] => 18 [4] => 7 [5] => 4 [6] => 2 [7] => 2 [8] => 5 [9] => 7 [10] => 10 [11] => 10 [12] => 12 [13] => 7 [14] => 5 [15] => 9 [16] => 10 [17] => 11 [18] => 12 [19] => 6 [20] => 2 [21] => 0 [22] => 2 [23] => 6 [24] => 11 [25] => 11 [26] => 12 [27] => 11 [28] => 6 [29] => 7 [30] => 11 [31] => 10 [32] => 11 [33] => 10 [34] => 2 [35] => 0 [36] => 0 [37] => 2 [38] => 4 [39] => 14 [40] => 15 [41] => 7 [42] => 4 )

如果有人不理解图表,我又做了另一个(带有其他值)

我该怎么做?

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题,那么下一段代码可能会对你有所帮助:

$localMinimums = array ();

for ($i = 1; $i<count($chart)-1; $i++) {
    if ($chart[$i-1] > $chart[$i] && $chart[$i+1] >= $chart[$i]) {
        $localMinimums[$i] = $chart[$i];
    }   
}

asort($localMinimums);
$result = array_slice($localMinimums, 0, 3); //I think that you need only 3 minimum elements 

或者你可能需要通过thresold切片?

答案 1 :(得分:0)

对数组进行排序:

// Sorts by value.. 
asort($chart);

然后得到min:

// Smallest
$smallest = $chart[0];