Re: lists of lists, tensor products and stuff like that..
- To: mathgroup at smc.vnet.net
- Subject: [mg44987] Re: [mg44976] lists of lists, tensor products and stuff like that..
- From: "Sseziwa Mukasa,,(978) 536-2359" <mukasa at jeol.com>
- Date: Fri, 12 Dec 2003 04:41:25 -0500 (EST)
- References: <200312111028.FAA13145@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
On Dec 11, 2003, at 5:28 AM, allan wrote: > hi, i want to work with a data structure which is basically a tensor > product or matrix of matrixes of vectors. so for instance, i'd like > to do operations like taking an i x j matrix of 3 vectors and an n x n > matrix of 3 vectors, and form the (i x j) x (n x n) matrix of dot > products. > > it would appear that Outer, Flatten, List etc are exactly set up to do > this sort of thing but i can't seem to get the hang of it. is there a > good introduction, or overview (rather than function by function) > documentation, or illustrative examples of this? > > thanks in advance! Your problem looks like you have an ixj matrix and want the direct product of that with an nxn matrix where the elements of the matrices are 3 vectors and the operation is the scalar product. Outer computes the direct product, but since a 3 vector looks like a list if you write Outer[Dot,a,b] where a is you ixj object and b your nxn matrix it will treat a as an ixjx3 object and b as an nxnx3 object which isn't what you want. There is another form of Outer where you can specify that you only want to treat the previous arguments as lists to a certain depth. However in playing around with that function I found that if the subobjects were lists this form doesn't work as expected. For example compare the results of: Outer[z, {{v[a, b, c], v[d, e, f]}}, {{v[g, h, i], v[j, k, l]}, {v[m, n, o], v[p, q, r]}}] and Outer[z,{{{a, b, c}, {d, e, f}}}, {{{g, h, i}, {j, k, l}}, {{m, n, o}, {p, q, r}}},2] which I would have expected to be the same except the arguments to z from the first expression have the head v and the arguments in the second expression have the head List. This isn't the case and I don't understand why. However it does give one a clue as to how to solve you problem: simply change the head of the vectors and remove the change later ie, Outer[Dot[List @@ #, List @@ #2] &, Apply[v, {{{a, b, c}, {d, e, f}}}, {2}], Apply[ v, {{{g, h, i}, {j, k, l}}, {{m, n, o}, {p, q, r}}}, {2}]] returns the results you want. Obviously I skipped a few steps in how I arrived at this expression, but I think you should be able to see how I came up with it. Regards, Ssezi
- References:
- lists of lists, tensor products and stuff like that..
- From: allanc@alum.mit.edu (allan)
- lists of lists, tensor products and stuff like that..