Nice - I didn't realize dyalog had a blog. Looks like great content. It may
be time to finally learn a bit of APL to have a passing reading
comprehension in it. I have stopped and started the Dyalog book a few times
over the years as I have wanted to digest some of the Essays but that is
probably better discussed in the chat forum. Thanks for the reference

On Fri, Apr 13, 2018, 4:25 PM Roger Hui <[email protected]> wrote:

> It's useful to have at your fingertips a (small) set of manoeuvers:
>
> x * 0 = 0
> x * 1 = x
>
> x ^ 0 = 1
> x ^ 1 = x
>
> etc.
>
> The  Y {~ X i. x  phrase, for mapping cells in X to values in Y, is also
> generally useful.  See the Dyalog APL blog post Calcultion v Look-Up
> <https://www.dyalog.com/blog/2017/04/calculation-v-look-up/>.  (It's APL
> rather than J but you can handle that, right? :-)  I read somewhere that
> Google uses that (looking up instead of calculating) a lot, but I don't
> have the reference now.
>
>
>
> On Fri, Apr 13, 2018 at 1:04 PM, Joe Bogner <[email protected]> wrote:
>
> > Don - the source data is a text file of float data that is being read
> into
> > J
> >
> > Roger - thanks, for the confirmation. I find that when I'm way from J/APL
> > for awhile, my mind drifts back into "if/then" thinking instead of the
> > simpler and faster method of using multiplication where possible. I
> fiddled
> > with ^: and @. for over an hour until I posted here, and then in a moment
> > of odd clarity the multiplication idea hit
> >
> > Somewhat tangential -- I recently had to do quantity conversions
> >
> > QuantitySF = IF(UOM="SF",Quantity,UOM="SY",Quantity*9,0)
> >
> > Beautifully (in my opinion) represented as:
> >
> >   qtysf =. qty*(1,9,0) {~ idotfill (>'SF';'SY');uom
> >
> > I'm not nearly as good at keeping references, but this has been
> highlighted
> > before I think as a hallmark of APL/J elsewhere. I will have to read
> > through the Knuth paper linked
> >
> >
> >
> >
> > On Fri, Apr 13, 2018 at 3:47 PM, Roger Hui <[email protected]>
> > wrote:
> >
> > > Yes, it's a boon that 0 * x is 0 for any x.  Some authors go even
> > further:
> > > Knuth propose to have 0 * x be 0 even when x is an expression which is
> in
> > > error.  He wanted this to make "Iverson's convention" work in more
> > > situations.  See
> https://arxiv.org/PS_cache/math/pdf/9205/9205211v1.pdf
> > >
> > >
> > >
> > > On Fri, Apr 13, 2018 at 12:24 PM, Joe Bogner <[email protected]>
> > wrote:
> > >
> > > > Well, I stumbled upon a fast way that takes advantage of simple
> > > > multiplication
> > > >
> > > > _ * 0 = 0
> > > > _ * 1 = _
> > > > 5 * 1 = 5
> > > >
> > > >
> > > >    _3 {. (-.@isblank * _&".) c1
> > > > 1.01 _ 0
> > > >    (6!:2) '(isblank * _&".) c1'
> > > > 1.00593
> > > >
> > > > I'm still interested in alternatives that are similar speed if
> possible
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > On Fri, Apr 13, 2018 at 3:19 PM, Joe Bogner <[email protected]>
> > wrote:
> > > >
> > > > > Thank you -- Yes, I didn't want to send along the full sample,
> > > although I
> > > > > could have created some dummy data.
> > > > >
> > > > > Both Don and Raul's method are similar and are equally slow as the
> > way
> > > I
> > > > > had
> > > > >
> > > > > It's not terribly important but I have like 10 numeric columns
> that I
> > > > > convert in a script and have to painfully wait 30 seconds each
> time I
> > > run
> > > > > the script. If I could shave 20 seconds off something that I seem
> to
> > be
> > > > > running multiple times a day and learn something in the process, I
> > > > figured
> > > > > it was worthwhile to ask
> > > > >
> > > > >   (6!:2) '{.@(_&".)"1 c'
> > > > > 3.44371
> > > > >
> > > > > Here's a reasonable approximation:
> > > > >
> > > > > c1 =. 1.5e6 #  (>' ';'bad';'10')
> > > > >
> > > > >
> > > > >  c1=: (((5e6,4)$'1.01'),'bad'),' '
> > > > >    $ c1
> > > > > 5000002 4
> > > > >    (6!:2) '{.@(_&".)"1 c1'
> > > > > 3.29915
> > > > >
> > > > >
> > > > > Compare to
> > > > >
> > > > >  (6!:2) '_ ". c1'
> > > > > 1.01854
> > > > >
> > > > >    _3 {. _ ". c1 NB. bad values at the end... ideally the blank is
> 0
> > > > though
> > > > > 1.01 _ _
> > > > >
> > > > >
> > > > > On Fri, Apr 13, 2018 at 2:13 PM, Raul Miller <
> [email protected]>
> > > > > wrote:
> > > > >
> > > > >> Your sample data does not match your problem description.
> > > > >>
> > > > >> That said,
> > > > >>
> > > > >>    {.@(_&".)"1 > ' ';'bad';'10'
> > > > >> 0 _ 10
> > > > >>
> > > > >> Thanks,
> > > > >>
> > > > >> --
> > > > >> Raul
> > > > >>
> > > > >>
> > > > >> On Fri, Apr 13, 2018 at 2:03 PM, Joe Bogner <[email protected]>
> > > > wrote:
> > > > >> > I have a large byte array that I want to convert to a number
> > array.
> > > I
> > > > >> want
> > > > >> > to use _ to indicate a bad value, but blank should be treated
> as 0
> > > > >> >
> > > > >> >   $ c
> > > > >> > 4862343 10
> > > > >> >
> > > > >> > Instead of this:
> > > > >> >
> > > > >> > asnumber =: _&".
> > > > >> >
> > > > >> >    asnumber  (>' ';'bad';'10')
> > > > >> > _ _ 10
> > > > >> >
> > > > >> > I want this:
> > > > >> >
> > > > >> >
> > > > >> >    asnumber  (>' ';'bad';'10')
> > > > >> > 0 _ 10
> > > > >> >
> > > > >> > This works, but is much slower than I'd like -- nearly 3x slower
> > > than
> > > > >> just
> > > > >> > _ ".
> > > > >> >
> > > > >> >    asnumber =: _ ". '0' ,~^:([: */ ' '&=@])"1  ]
> > > > >> >    asnumber  (>' ';'bad';'10')
> > > > >> > 0 _ 10
> > > > >> >
> > > > >> >    (6!:2) 'asnumber c'
> > > > >> > 3.32579
> > > > >> >    (6!:2) '_&". c'
> > > > >> > 1.35091
> > > > >> >
> > > > >> >
> > > > >> > I have an isblank function that is fast
> > > > >> >
> > > > >> >    isblank =. ([: ({. -:"1 }.) ' '&,)
> > > > >> >    (6!:2) 'isblank c'
> > > > >> > 0.033164
> > > > >> >
> > > > >> > I can't seem to combine the two into something that performs
> well
> > > > >> without
> > > > >> > doing things at the atom/row level instead of the entire array.
> I
> > > > >> suspect
> > > > >> > I'm getting tripped up by rank
> > > > >> > ------------------------------------------------------------
> > > > ----------
> > > > >> > For information about J forums see http://www.jsoftware.com/
> > > > forums.htm
> > > > >> ------------------------------------------------------------
> > > ----------
> > > > >> For information about J forums see http://www.jsoftware.com/
> > > forums.htm
> > > > >>
> > > > >
> > > > >
> > > >
> ----------------------------------------------------------------------
> > > > For information about J forums see
> http://www.jsoftware.com/forums.htm
> > > >
> > > ----------------------------------------------------------------------
> > > For information about J forums see http://www.jsoftware.com/forums.htm
> > >
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> >
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to