MathGroup Archive 2000

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: extracting column data from 2D Matrix

  • To: mathgroup at smc.vnet.net
  • Subject: [mg23428] Re: extracting column data from 2D Matrix
  • From: "Allan Hayes" <hay at haystack.demon.co.uk>
  • Date: Wed, 10 May 2000 02:32:14 -0400 (EDT)
  • References: <8f54qe$487@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Chris,

Please enter the following into Mathematica and evaluate.
First question:

xyData = Table[Random[Integer, 9], {3}, {5}]

xyData[[All, {1, 3, 5}]]


Second question: first a step by step solution.

a0 = Rest[Transpose[xyData]]

a1 = Partition[a0, 2]

a2 = Map[Sequence @@ Append[#, (Plus @@ #)/Length[#]] &, a1, {1}]

a3 = Prepend[a2, xyData[[All, 1]]]

Transpose[a3]

Now put this  together in a function with some input tests.

columnMeans[data_, n_Integer] /; IntegerQ[(Dimensions[data][[2]] - 1)/n
      ] :=
  Transpose[
    Prepend[Map[Sequence @@ Append[#, (Plus @@ #)/n] &,
        Partition[Rest[Transpose[data]], n], {1}], data[[All, 1]]]]

Check the function for correctness

columnMeans[xyData, 2]

Time on a largish example.

tst =  Table[Random[], {1000}, {101}];

(res = columnMeans[tst, 10]); // Timing

{1.26 Second, Null}

Dimensions[res]

{1000, 111}


Allan
---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565

"Krautschik, Chris G" <krautschikc at intel.co.jp> wrote in message
news:8f54qe$487 at smc.vnet.net...
> I have a 2D Matrix of say 101 columns and 1000 rows. Let's call the data
> matrix xyDATA. The first column represents the X coordinate and all other
> columns represent Y coordindates for different input conditions.
>
> Let's say I need to extract every 10th y column as well as the X column
(1st
> column) so I can plot the data in another program. I have been using the
> following expression for the extraction process:
>
> colmnIndex={#1, #11,#21,#31#41,#51,#61,#71,#81,#91,#101};
> xy10 = columIndex & @@@ xyDATA;
>
> How do I automate the process for the column Index without have to type it
> each time? That is perhaps something like the following I had in mind:
>
> yindex= #*Table[i,{1,101,10}];
> columnIndex2=Append[{#1},yindex];
>
> This though doesn't seem to work even when I used:
>
> ToExpression[columnIndex2]
>
> or tried various other string to expression schemes.
>
> Also I like to average each 10 consequitive rows. That is I have written a
> RowMean function that generate the column vector of the 1000 elements. How
> do I then insert after each 10 y column the columns that holds the
average?
> So the matrix now grows from 101 colums to 111 colums (still 1000 rows)
but
> the averaged columns need to be inserted at (12,22,33,...).
>
> thanks,
> Chris
>
>
>




  • Prev by Date: evaluation sequence
  • Next by Date: Fonts in plots
  • Previous by thread: Re: extracting column data from 2D Matrix
  • Next by thread: Modifying Fit[] using SingularValues