"stepwise" integrating a 2D array
- To: mathgroup at smc.vnet.net
- Subject: [mg91158] "stepwise" integrating a 2D array
- From: Claus <clausenator at gmail.com>
- Date: Fri, 8 Aug 2008 07:12:16 -0400 (EDT)
- Organization: Comp.Center (RUS), U of Stuttgart, FRG
Hi, I have an array, consisting of n tuples (x,y,z). The first entry is the point at the bottom left (thinking in a coordinate system, smallest (x,y) pair). Now I want to do something like an "stepwise"/empirical integral over (x,y). Schematically, if I had a 2x2 array (only the z-values),like a1 a2 b1 b2 I would want an array like this: a1+b1 b1+b2+a1+a2 b1 b1+b2 In the code below, "xyzVals" is the array that I want to integrate, containing the (x,y,z) tuples. I could do a bunch of for loops, but I am trying to not use do loops in mathematica whenever possible. Is it possible to do it without? I tried some of the examples from http://www.verbeia.com/mathematica/tips/HTMLLinks/Tricks_A-K_3.html and I also thought about an array with sub-arrays, but couldn't get it for me to work. Thanks for any pointers! Claus In[13]:= X = RandomReal[{0, 1}, 500]; Y = RandomReal[{0, 1}, 500]; BinWidth = 0.2; DensVals = Flatten[BinCounts[ Transpose[{X, Y}], {0, 1, BinWidth}, {0, 1, BinWidth}]] Out[16]= {16, 16, 17, 26, 23, 23, 16, 18, 25, 17, 13, 26, 26, 21, 19, \ 15, 32, 20, 21, 15, 11, 26, 16, 19, 23} In[17]:= xyzVals = Table[{i/(1/BinWidth) + (BinWidth/2), j/(1/BinWidth) + (BinWidth/2), DensVals[[(1/BinWidth) i + j + 1]]} , {i, 0, (1/BinWidth) - 1} , {j, 0, (1/BinWidth) - 1}] Out[17]= {{{0.1, 0.1, 16}, {0.1, 0.3, 16}, {0.1, 0.5, 17}, {0.1, 0.7, 26}, {0.1, 0.9, 23}}, {{0.3, 0.1, 23}, {0.3, 0.3, 16}, {0.3, 0.5, 18}, {0.3, 0.7, 25}, {0.3, 0.9, 17}}, {{0.5, 0.1, 13}, {0.5, 0.3, 26}, {0.5, 0.5, 26}, {0.5, 0.7, 21}, {0.5, 0.9, 19}}, {{0.7, 0.1, 15}, {0.7, 0.3, 32}, {0.7, 0.5, 20}, {0.7, 0.7, 21}, {0.7, 0.9, 15}}, {{0.9, 0.1, 11}, {0.9, 0.3, 26}, {0.9, 0.5, 16}, {0.9, 0.7, 19}, {0.9, 0.9, 23}}}