[GRASS-dev] G7: r.neighbors changes data type from CELL to DCELL
Glynn Clements
glynn at gclements.plus.com
Mon May 19 06:08:02 PDT 2014
Markus Neteler wrote:
> >> 1) "quantile=0.5" creeps into the history:
> >>
> >> r.info landuse96_28m_mode7x7
> >> ...
> >> | r.neighbors input="landuse96_28m" output="landuse96_28m_mode7x7" met\ |
> >> | hod="mode" size=3 quantile=0.5
> >>
> >> --> quantile=0.5 should not be there (even if ignored).
> >
> > Remove the line:
> >
> > parm.quantile->answer = "0.5";
> >
> > Optionally change:
> >
> > out->quantile = (parm.quantile->answer && parm.quantile->answers[i])
> > ? atof(parm.quantile->answers[i])
> > : 0;
> >
> > to default to 0.5 rather than 0.
> >
> > But given that we already a distinct "median" method, using
> > "quantile=0.5" is largely redundant.
>
> ... mmh, not sure what to change.
Fixed in r60345.
> >> 2) The method=mode does not preserve CELL (likewise in r.series).
Note that the same issue applies to minimum, maximum, range, and
(unweighted) sum.
> This is a bit over my programming skills.
> But the broken "mode" operator is a critical issue.
>
> Help (=svn commits) welcome,
r60346 implements the following logic:
For any aggregate, there are 2 factors affecting the output type:
1. Whether the input map is integer or floating-point.
2. Whether the weighted or unweighted version of the aggregate is used.
These combine to create 4 possibilities:
type integer integer float float
weighted no yes no yes
average float float float float
median [1] [1] float float
mode integer integer [2] [2]
minimum integer integer float float
maximum integer integer float float
range integer integer float float
stddev float float float float
sum integer float float float
count integer float integer float
variance float float float float
diversity integer integer integer integer
interspersion integer integer integer integer
quart1 [1] [1] float float
quart3 [1] [1] float float
perc90 [1] [1] float float
quantile [1] [1] float float
[1] For integer input, quantiles may produce float results from
interpolating between adjacent values.
[2] Calculating the mode of floating-point data is essentially
meaningless.
With the current aggregates, there are 5 cases:
1. Output is always float: average, variance, stddev, quantiles (with
interpolation).
2. Output is always integer: diversity, interspersion.
3. Output is integer if unweighted, float if weighted: count.
4. Output matches input: minimum, maximum, range, mode (subject to
note 2 above), quantiles (without interpolation).
5. Output is integer for integer input and unweighted aggregate,
otherwise float: sum.
--
Glynn Clements <glynn at gclements.plus.com>
More information about the grass-dev
mailing list