[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: efficient kernel or masking algorithm ?

"J.D. Smith" <jdsmith@astro.cornell.edu> writes:
> Ahh yes, multiplication by decimation.  Must have missed that one.  I
> simply read the comment in your code without looking at the details:
> ;; *** Multiplication
> (newop EQ '*'): begin ;; Multiplication (by summation of logarithms)
> Did you do some time testing and find all that shifted indexing was
> really faster than the logarithm?  This I suspect will be very
> architecture dependent.  Looks neat though.  

The summation of logarithms was never very satisfactory.  It never
handled zeroes very well.  Since there can be multiplication by
negative numbers you really had to do a complex logarithm.  All of
these conversions made it quite slow.

> Maybe I'll write up the 100 lines of C it would take for a shared
> library to do dimensional multiply, sum, add, median, min, max, and, or,
> mode, variance, etc., and send it to RSI.   The problem with all of this
> specific "vector-aware" coding, is that it reveals a dirty secret of
> IDL's.  It was built to do some vector operations fast, but was never a
> truly generic vector language like APL or J.  

Yorick is very similar to IDL, but "better" in a lot of ways.  One
thing it has is the ability to write array indices which are
functions.  So, if you had a 2 dimensional array, you could get the
MIN along one dimension or the other by doing this:

array[min,*]    or array[*,min]     [syntax not totally correct]

This is a very compact and meaningful notation.  It has all sorts of
functions that can go in there, like cumulative sum, first difference,

Now, people who want to do complicated sliding variances and medians,
that's a much harder thing to accomplish with a vector language.  We
would need a fairly sophisticated "convolution" routine, which might
be hard to optimize.


Craig B. Markwardt, Ph.D.         EMAIL:    craigmnet@cow.physics.wisc.edu
Astrophysics, IDL, Finance, Derivatives | Remove "net" for better response