Re: Thread::tdlen: Objects of unequal length in
- To: mathgroup at smc.vnet.net
- Subject: [mg127765] Re: Thread::tdlen: Objects of unequal length in
- From: Bob Hanlon <hanlonr357 at gmail.com>
- Date: Mon, 20 Aug 2012 21:28:43 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-newout@smc.vnet.net
- Delivered-to: mathgroup-newsend@smc.vnet.net
- References: <20120820081407.058F0681E@smc.vnet.net>
You give an example of something that doesn't do what you want but you never say what it is that you do want done. Since Last[testdata] is a vector I assume that testdata is an m x n array, testdata = Array[a, {3, 5}] {{a[1, 1], a[1, 2], a[1, 3], a[1, 4], a[1, 5]}, {a[2, 1], a[2, 2], a[2, 3], a[2, 4], a[2, 5]}, {a[3, 1], a[3, 2], a[3, 3], a[3, 4], a[3, 5]}} Your first function is f1 = MapThread[Mean, Sequence[{{testdata}}]] {{(1/3)*(a[1, 1] + a[2, 1] + a[3, 1]), (1/3)*(a[1, 2] + a[2, 2] + a[3, 2]), (1/3)*(a[1, 3] + a[2, 3] + a[3, 3]), (1/3)*(a[1, 4] + a[2, 4] + a[3, 4]), (1/3)*(a[1, 5] + a[2, 5] + a[3, 5])}} What you have implemented is f1 == {Mean[testdata]} == {Mean /@ Transpose[testdata]} == {Total[testdata]/Length[testdata]} True Length[f1] 1 If what you want is the Mean of each row of testdata then use meanByRows = Mean /@ testdata {(1/5)*(a[1, 1] + a[1, 2] + a[1, 3] + a[1, 4] + a[1, 5]), (1/5)*(a[2, 1] + a[2, 2] + a[2, 3] + a[2, 4] + a[2, 5]), (1/5)*(a[3, 1] + a[3, 2] + a[3, 3] + a[3, 4] + a[3, 5])} Length[meanByRows] 3 If you want the mean of each column then use meanByColumns = Mean[testdata] {(1/3)*(a[1, 1] + a[2, 1] + a[3, 1]), (1/3)*(a[1, 2] + a[2, 2] + a[3, 2]), (1/3)*(a[1, 3] + a[2, 3] + a[3, 3]), (1/3)*(a[1, 4] + a[2, 4] + a[3, 4]), (1/3)*(a[1, 5] + a[2, 5] + a[3, 5])} Length[meanByColumns] 5 meanByColumns == Mean /@ Transpose[testdata] == Total[testdata]/Length[testdata] == f1[[1]] True If what you want is the mean of all of the elements of testdata then use meanOfAll = testdata // Flatten // Mean (1/15)*(a[1, 1] + a[1, 2] + a[1, 3] + a[1, 4] + a[1, 5] + a[2, 1] + a[2, 2] + a[2, 3] + a[2, 4] + a[2, 5] + a[3, 1] + a[3, 2] + a[3, 3] + a[3, 4] + a[3, 5]) meanOfAll == Mean[meanByRows] == Mean[meanByColumns] // Simplify True Bob Hanlon On Mon, Aug 20, 2012 at 4:14 AM, Aaron <aaron.sokolik at gmail.com> wrote: > I'm new to Mathematica and trying to run rebuild some programs from other= systems in Mathematica. I'm operating on large data lists and receiving t= he unequal length error. However, if I simply paste the output without the= extra curly bracket into an operation, everything works. Obviously, copyi= ng and pasting wont work for functions... How can I get around this? > > Below are the functions I'm using to generate two lists from a single dat= aset: > > ln[13]:= MapThread[Mean, Sequence[{{testdata}}]] > Out[13]= {{15.0059, 14.9897, 15.0248,....}} > > ln[14]:= Last[testdata] > Out[14]= {14.9602, 14.8624, 15.3364, 15.0231,....} > > When I run Length on each of the outputs, I receive the proper number of = datapoints for the Last function but receive an output of "1" for the Mean = function. If I paste the output with only 1 "{" though and run Length, I r= eceive the proper output. > > I know this must be simple but I'm stuck. >
- References:
- Thread::tdlen: Objects of unequal length in
- From: Aaron <aaron.sokolik@gmail.com>
- Thread::tdlen: Objects of unequal length in