Re: BinCounts to InterpolatingFunction
- To: mathgroup at smc.vnet.net
- Subject: [mg109456] Re: BinCounts to InterpolatingFunction
- From: dh <dh at metrohm.com>
- Date: Tue, 27 Apr 2010 08:48:10 -0400 (EDT)
- References: <hr65uu$jtk$1@smc.vnet.net>
On 27.04.2010 10:06, Kevin J. McCann wrote:
> I am using a Markov Chain Monte Carlo (MCMC) approach to evaluate a
> multidimensional probability density function. The output is a large
> number of multidimensional points {x1,x2,...,xn}. I can use BinCounts to
> gather the points into a PDF (after appropriate normalization). I would
> like to then define a function, p[X_], which is the multidimensional
> interpolation of the BinCounts output, but I can't figure out how to
> automate this for an arbitrary number of dimensions.
>
> Any ideas?
>
> For the 2d case I did the following:
>
> tbl = Partition[
> Flatten[Table[{xmin + i*\[CapitalDelta]x + \[CapitalDelta]x/2,
> ymin + j*\[CapitalDelta]y + \[CapitalDelta]y/2,
> counts[[i + 1,
> j + 1]]/(\[ScriptCapitalN] \[CapitalDelta]x \
> \[CapitalDelta]y)}, {i, 0, nx - 1}, {j, 0, ny - 1}]], 3];
>
> f=Interpolation[tbl]
>
> But as you can see, this is not easily extended to higher dimensions.
>
> Kevin
>
Hi Kevin,
if I understand correctly, your problem is the generation of a suitable
grid of data points for "Interpolation".
Assume you have a function bins[{i1,i2,..,in}] of n integer arguments.
The arguments run from 0..ni. The vector of ni is called
bounds={n1,n2..nn}. We can now define the function "dataGrid" that
creates a rectangular multidimensional structure for the input to
Interpolation:
dataGrid[bins_, bounds_] := Module[{iter},
iter = {x, 0, n - 1} /.
Table[{x -> Symbol["x" <> ToString[i]], n -> bounds[[i]]}, {i, 1,
Length[bounds]}];
Flatten[
Table[{iter[[All, 1 ]], bins[iter[[All, 1 ]]]},
Evaluate[Sequence @@ iter]]
, Length[bounds] - 1]
]
If we choose an example for bins:
bins[v : {_ ..}] := Times @@ v;
we can calulation an interpolation:
bins[v : {_ ..}] := Times @@ v;
Interpolation@dataGrid[bins, {4, 4, 4}]
cheers, Daniel
--
Daniel Huber
Metrohm Ltd.
Oberdorfstr. 68
CH-9100 Herisau
Tel. +41 71 353 8585, Fax +41 71 353 8907
E-Mail:<mailto:dh at metrohm.com>
Internet:<http://www.metrohm.com>