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
