What is happening here?
- To: mathgroup at smc.vnet.net
- Subject: [mg22107] What is happening here?
- From: "Jordan Rosenthal" <jr at ece.gatech.edu>
- Date: Mon, 14 Feb 2000 02:03:58 -0500 (EST)
- Organization: Georgia Institute of Technology, Atlanta GA, USA
- Sender: owner-wri-mathgroup at wolfram.com
Hi all,
I finally had a chance to try and compare all the different methods people
sent me for computing the matrix
( 1 0 0 )
( 2 1 0 )
( 3 2 1 )
( 0 3 2 )
( 0 0 3 )
from the vector {1,2,3} (using much larger vectors). I am running into a
strange problem that I can't explain.
I started by creating a function for each contributer. Here is an example
for two of the defintions (picked arbitrarily for this example because they
were first and last in the alphabet):
-------------------------------------------------------
f["Paul Abbot"][v_?VectorQ] := Module[
{n = Length[v]},
NestList[RotateRight,
Reverse[PadRight[PadLeft[v, 2n - 1], 3n - 2]], 2n - 2][[All,
Range[2n - 1, 3n - 2]]]
]
f["Hartmut Wolf"][v_?VectorQ] := With[{r = Length[v] - 1},
Transpose[NestList[RotateRight, Join[v, Table[0, {r}]], r]]]
-------------------------------------------------------
Running the following code (based on a suggestion from Hartmut Wolf) works
great:
-------------------------------------------------------
vLarge = Range[400];
List @@ (Part[#, 1, 1] &) /@
Timing /@ Through[ Hold[f["Paul Abbot"], f["Hartmut Wolf"]][vLarge]]
{0.49 Null, 0.27 Null}
-------------------------------------------------------
This works great; it gives me a list of timings for the two methods. But
because I have a large list I wanted to instead run code like this (where
authornames would be a larger vector):
-------------------------------------------------------
authornames = {"Paul Abbot", "Hartmut Wolf"};
List @@ (Part[#, 1, 1] &) /@
Timing /@ Through[ FullForm[Hold @@ (f /@ authornames)][vLarge]]
{0. Null}
-------------------------------------------------------
but this doesn't work the same way. So I tried to compare the difference
between the two versions by checking the difference between the code I
replaced and my code. Shown below, the two expressions have the same
FullForms and Attributes:
-------------------------------------------------------
expr1 = Hold[ f["Paul Abbot"], f["Hartmut Wolf"] ];
expr2 = Hold @@ (f /@ authornames);
FullForm[expr1]==FullForm[expr2]
True
Attributes[expr1]==Attributes[expr2]
True
expr1 == expr2
True
-------------------------------------------------------
If the two expression have the same FullForm and Attributes, why do I not
get the same results if I substitute one for the other?
Humbly perplexed,
Jordan
- Follow-Ups:
- Re: What is happening here?
- From: Hartmut Wolf <hwolf@debis.com>
- Re: What is happening here?