GRASS 8 Programmer's Manual
8.5.0(2026)-8d6ceba290
Toggle main menu visibility
Loading...
Searching...
No Matches
c_percentile.c
Go to the documentation of this file.
1
#include <math.h>
2
3
#include <grass/gis.h>
4
#include <grass/raster.h>
5
#include <grass/stats.h>
6
7
void
c_quant
(DCELL *result, DCELL *values,
int
n,
const
void
*closure)
8
{
9
double
quant = *(
const
double
*)closure;
10
double
k;
11
int
i0, i1;
12
13
n =
sort_cell
(values, n);
14
15
if
(n < 1) {
16
Rast_set_d_null_value(result, 1);
17
return
;
18
}
19
20
/* algorithm type 7 of Hyndman and Fan (1996), default in R */
21
k = quant * (n - 1);
22
i0 = (int)floor(k);
23
i1 = (int)ceil(k);
24
25
*result =
26
(i0 == i1) ? values[i0] : values[i0] * (i1 - k) + values[i1] * (k - i0);
27
}
28
29
void
c_quart1
(DCELL *result, DCELL *values,
int
n,
const
void
*closure G_UNUSED)
30
{
31
static
const
double
q = 0.25;
32
33
c_quant
(result, values, n, &q);
34
}
35
36
void
c_quart3
(DCELL *result, DCELL *values,
int
n,
const
void
*closure G_UNUSED)
37
{
38
static
const
double
q = 0.75;
39
40
c_quant
(result, values, n, &q);
41
}
42
43
void
c_perc90
(DCELL *result, DCELL *values,
int
n,
const
void
*closure G_UNUSED)
44
{
45
static
const
double
q = 0.90;
46
47
c_quant
(result, values, n, &q);
48
}
49
50
void
w_quant
(DCELL *result, DCELL (*values)[2],
int
n,
const
void
*closure)
51
{
52
double
quant = *(
const
double
*)closure;
53
DCELL total;
54
int
i;
55
DCELL k;
56
57
n =
sort_cell_w
(values, n);
58
59
if
(n < 1) {
60
Rast_set_d_null_value(result, 1);
61
return
;
62
}
63
64
total = 0.0;
65
for
(i = 0; i < n; i++)
66
total += values[i][1];
67
68
k = 0.0;
69
for
(i = 0; i < n; i++) {
70
k += values[i][1];
71
if
(k >= total * quant)
72
break
;
73
}
74
75
*result = values[i][0];
76
}
77
78
void
w_quart1
(DCELL *result, DCELL (*values)[2],
int
n,
79
const
void
*closure G_UNUSED)
80
{
81
static
const
double
q = 0.25;
82
83
w_quant
(result, values, n, &q);
84
}
85
86
void
w_quart3
(DCELL *result, DCELL (*values)[2],
int
n,
87
const
void
*closure G_UNUSED)
88
{
89
static
const
double
q = 0.75;
90
91
w_quant
(result, values, n, &q);
92
}
93
94
void
w_perc90
(DCELL *result, DCELL (*values)[2],
int
n,
95
const
void
*closure G_UNUSED)
96
{
97
static
const
double
q = 0.90;
98
99
w_quant
(result, values, n, &q);
100
}
w_quant
void w_quant(DCELL *result, DCELL(*values)[2], int n, const void *closure)
Definition
c_percentile.c:50
w_perc90
void w_perc90(DCELL *result, DCELL(*values)[2], int n, const void *closure)
Definition
c_percentile.c:94
c_quart1
void c_quart1(DCELL *result, DCELL *values, int n, const void *closure)
Definition
c_percentile.c:29
w_quart3
void w_quart3(DCELL *result, DCELL(*values)[2], int n, const void *closure)
Definition
c_percentile.c:86
c_quart3
void c_quart3(DCELL *result, DCELL *values, int n, const void *closure)
Definition
c_percentile.c:36
w_quart1
void w_quart1(DCELL *result, DCELL(*values)[2], int n, const void *closure)
Definition
c_percentile.c:78
c_perc90
void c_perc90(DCELL *result, DCELL *values, int n, const void *closure)
Definition
c_percentile.c:43
c_quant
void c_quant(DCELL *result, DCELL *values, int n, const void *closure)
Definition
c_percentile.c:7
sort_cell
int sort_cell(DCELL *array, int n)
Definition
sort_cell.c:27
sort_cell_w
int sort_cell_w(DCELL(*array)[2], int n)
Definition
sort_cell.c:46
stats
c_percentile.c
Generated on
for GRASS 8 Programmer's Manual by
1.17.0