MathGroup Archive 2002

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

Search the Archive

Re: Newbie Question

  • To: mathgroup at smc.vnet.net
  • Subject: [mg32731] Re: [mg32686] Newbie Question
  • From: Tomas Garza <tgarza01 at prodigy.net.mx>
  • Date: Thu, 7 Feb 2002 05:10:37 -0500 (EST)
  • References: <200202060841.DAA02223@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

I think it's a very good idea to throw Fortran away and get started with
Mathematica. Your problem may be solved in a number of ways using powerful
techniques in Mathematica. I herein propose one which illustrates - I hope -
the type of things that may be done. It is not the most elementary way, but
I think it's fast (as always, someone will turn up with something better,
but that's the way it goes in this MathGroup). The function perctDiffs
defined below will take a list of any dimensions and calculate the percent
differences between the n-th and the (n-m)-th elements for each column. I
only hope (since you said you were using financial time series) that you
have no zero elements; otherwise you'd have to slightly modify the routine
to avoid divisions by zero.

In[1]:=
perctDiffs[lst_List, m_Integer] := Module[{n, ker},
   ker[n_Integer] := Prepend[Append[Table[0, {n - 1}], 1], -1];
    ker[0] = {-1, 1};
(ListCorrelate[ker[m], #1]/Drop[#1, -m] & ) /@
     Transpose[lst]]

I don't know what sort of lists you have (10^8 is really huge), but I tried
the function on a list of six columns by one million rows of random numbers

In[2]:=
lst = Table[Random[], {1000000}, {6}];
In[3]:=
Timing[perctDiffs[lst, 1]; ]
Out[3]=
{18.35 Second, Null}

and obtained the result for adjacent pairs in just over 18 seconds (my PC
runs at 800 MHz). It takes approximately the same time to calculate for
different lags. Time doesn't seem to be linear with list size, but I guess
this has to do with memory usage (?).

Tomas Garza
Mexico City

----- Original Message -----
From: "Brunsman, Kenneth J" <kbrunsman at ou.edu>
To: mathgroup at smc.vnet.net
Subject: [mg32731] [mg32686] Newbie Question


> Hello Group,
>
> I can't believe that I am asking this question, but ... I'm tired of
Fortran
> and find the symbolic part of Mathematica extremely useful.
>
> I have a list with Dimensions = {10,000, 6} and I need to find the Percent
> Difference between items in a column.
>
> I can parse out the column I need using Take [data [[All, Column #]]] ---
no
> big deal.  So far, so good.
>
> Now here's the problem --- How do I get % Differences between any of
10,000
> items in that list?  I need to take % Differences between adjacent pairs,
> i.e. n and n-1, as well as items n and n-m where m can range from 1 to
> 10,000.
>
> Further, I need to make sure that this code runs fast because I'm about to
> run this on a data set of 10^8 data points (financial times series).  I
> could do this standing on my head in Fortran, but I'm bound and determined
> to learn Mathematica if it takes the rest of my unnatural life.
>
> This is my first time attempting list processing and all I'm doing is
> screwing up royally.
>
> Help is greatly appreciated.
>
> Thanks in advance,
> Best to all,
>
> Ken Brunsman
>
> University of Oklahoma
> Michael F. Price College of Business
> Division of Management
> 307 W. Brooks, Room 205
> Norman, OK  73019-4006
>
> 405.325-5689
>



  • References:
  • Prev by Date: Re: Newbie Question
  • Next by Date: Sparse matrix manipulations
  • Previous by thread: Re: Newbie Question
  • Next by thread: Re: Newbie Question