Re: Using Fourier and InverseFourier instead of Convolve
- To: mathgroup at smc.vnet.net
- Subject: [mg85986] Re: Using Fourier and InverseFourier instead of Convolve
- From: "Dana DeLouis" <dana.del at gmail.com>
- Date: Fri, 29 Feb 2008 06:28:12 -0500 (EST)
> dims[[1]]dims[[2]]-dims[[1]]+1)^((dims[[1]]-1)/2)....etc
Hi. This does pretty much the same as your code, but uses a different
FourierParameters.
LC[v_List] := Module[{r, c, m, signal},
signal = FourierParameters -> {1, -1};
{r, c} = Dimensions[v];
m = PadRight[v, {r, r*c - r + 1}];
m = Map[Chop[Fourier[#, signal]] &, m];
m = Times @@ m;
m = Chop[InverseFourier[m, signal]];
If[MatrixQ[v, IntegerQ], Round[m], m]
] /; ArrayDepth[v] == 2
v = {{1, 2}, {3, 4}, {5, 6}};
LC[v]
{15, 68, 100, 48}
Fold[ListConvolve[#1, #2, {1, -1}, 0] &, First[v], Rest[v]]
{15, 68, 100, 48}
--
HTH :>)
Dana DeLouis
"Solomon, Joshua" <J.A.Solomon at city.ac.uk> wrote in message
news:fq5qp3$l0s$1 at smc.vnet.net...
> First, let me thank all who responded to my query!
> Second, no, Daniel, your code works fine for me.
> Finally, FWIW here is code that does what I really wanted, which was to
> quickly convolve a long list of lists (each having the same length).
> Possibly not the most elegant code ever, but it works, as I said, FWIW:
>
> cv[listOfLists_]:=With[{dims=Dimensions[listOfLists]},
> (dims[[1]]dims[[2]]-dims[[1]]+1)^((dims[[1]]-1)/2)
> InverseFourier[Times[##]]&@@(
> Fourier[PadRight[#,dims[[1]]dims[[2]]-dims[[1]]+1]
> ]&/@listOfLists)]
>
<snip>