[Jprogramming] Verb definition + inadvertent train formation.
bob therriault
bobtherriault at mac.com
Wed Nov 21 07:12:10 UTC 2012
Hi Roger,
Running J 701 on my iPad and on my laptop gets similar results to yours.
Running J 6.02 on the laptop still consistently shows the differences I posted, so my guess is now that J 7.01 handles 1: better than J 602
(sheepishly) cheers, bob
On 2012-11-20, at 9:04 PM, Roger Hui wrote:
> I think you need to take more care in doing benchmarks. What I got just
> now:
>
> 10 timer 'idMate1 9000'
> 0.110233
> 10 timer 'idMatt1 9000'
> 0.125659
> 10 timer 'idMatt2 9000'
> 0.106581
> 10 timer 'idMatt3 9000'
> 0.120995
>
>
>
> On Tue, Nov 20, 2012 at 5:48 PM, bob therriault <bobtherriault at mac.com>wrote:
>
>> Wow, would not have expected that , Devon :)
>>
>> After testing a substantially reduced challenge on my laptop (Devon, you
>> have some serious metal behind your J installation!)
>> idMate1=: 3 : '(2$y)$(>:y){.1' NB. Explicit and fast
>> (10) 6!:2 'idMate1 &.> 9000 '
>> 0.120056
>> idMatt1=: (2$])$1{.~>: NB. Tacit and fast
>> (10) 6!:2 'idMatt1 &.> 9000 '
>> 0.11531
>> idMatt2=: ,~ $ >: {. 1: NB. Tacit and slow
>> (10) 6!:2 'idMatt2 &.> 9000 '
>> 0.510053
>>
>> I am guessing that the 1: is the culprit and that these verbs may be used
>> rarely enough that they don't get the benefit of special code
>>
>> idMatt3=: ,~ $ 1{.~ >: NB. Same as idMatt2 without use of 1:
>> (10) 6!:2 'idMatt3 9000 '
>> 0.114926
>>
>> Thanks for the insight Devon, as I await Roger's clarification if I have
>> guessed wrong. :)
>>
>> Cheers, bob
>>
>> On 2012-11-20, at 5:12 PM, Devon McCormick wrote:
>>
>>> Here's what I get for timings for some of these methods:
>>>
>>> NB. Various ways to create ] x ] identity mat.
>>> idMat0=: =@:i.
>>> idMat1=: 3 : '(2$y)$(>:y){.1' NB.* faster, scales better
>>> idMat2=: ,~ $ >: {. 1:
>>>
>>> (10) 6!:2 'idMat0 &.> 36000 38000 40000 42000 44000 46000 48000 50000'
>>> 21.7756
>>> (10) 6!:2 'idMat1 &.> 36000 38000 40000 42000 44000 46000 48000 50000'
>>> 9.55495
>>> (10) 6!:2 'idMat2 &.> 36000 38000 40000 42000 44000 46000 48000 50000'
>>> 23.0792
>>>
>>> If you need a *:5e4 identity matrix, you're in trouble.
>>>
>>>
>>> On Tue, Nov 20, 2012 at 6:04 PM, bob therriault <bobtherriault at mac.com
>>> wrote:
>>>
>>>> Devon,
>>>>
>>>> I like that, or another tacit option
>>>>
>>>> idMat1=: ,~ $ >: {. 1:
>>>> idMat1 6
>>>> 1 0 0 0 0 0
>>>> 0 1 0 0 0 0
>>>> 0 0 1 0 0 0
>>>> 0 0 0 1 0 0
>>>> 0 0 0 0 1 0
>>>> 0 0 0 0 0 1
>>>>
>>>> Cheers, bob
>>>>
>>>> On 2012-11-20, at 1:33 PM, Devon McCormick wrote:
>>>>
>>>>> I used to have a named verb "idMat" in my own utilities library that
>> was
>>>>> defined this way:
>>>>> idMat=: =@:i.
>>>>>
>>>>> but testing this on large arguments led me to formulate this
>>>>> idMat=: 3 : '(2$y)$(>:y){.1' NB.* faster and scales better
>>>>>
>>>>> or, the same thing tacitly:
>>>>> idMat=: (2 $ ]) $ 1 {.~ >:
>>>>>
>>>>>
>>>>> On Tue, Nov 20, 2012 at 2:29 PM, Don & Cathy Kelly <dhky at shaw.ca>
>> wrote:
>>>>>
>>>>>> A key point that dawned on me, after reading all the helpful comments
>>>> and
>>>>>> suggestions that have come in, is that I don't need a verb- just a
>> noun
>>>> - so
>>>>>> y=: 2 3 4 2 2 3 (it also works for an n,n array)
>>>>>>
>>>>>> ] u=:=i.# y
>>>>>>
>>>>>> 1 0 0 0 0 0
>>>>>> 0 1 0 0 0 0
>>>>>> 0 0 1 0 0 0
>>>>>> 0 0 0 1 0 0
>>>>>> 0 0 0 0 1 0
>>>>>> 0 0 0 0 0 1
>>>>>>
>>>>>> and I can use u*y for different 'y''s ( as long as the # is the
>>>> same)
>>>>>> to get the desired diagonal elements with off diagonal elements 0
>>>>>> I want this because I want to add to the diagonal elements of a
>> matrix.
>>>>>> This is for a Newton Raphson based power system load flow.
>>>>>>
>>>>>> Thanks to all,
>>>>>> Don
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 20/11/2012 8:24 AM, Roger Hui wrote:
>>>>>>
>>>>>>> http://www.jsoftware.com/**jwiki/Essays/Identity%20Matrix<
>>>> http://www.jsoftware.com/jwiki/Essays/Identity%20Matrix>: 34 different
>>>> ways
>>>>>>> to generate the identity matrix of order n; the first is =@i. and the
>>>> last
>>>>>>> is _&q:@p:@i.
>>>>>>> ------------------------------**------------------------------**
>>>>>>> ----------
>>>>>>> For information about J forums see
>>>> http://www.jsoftware.com/**forums.htm<
>> http://www.jsoftware.com/forums.htm>
>>>>>>>
>>>>>>>
>>>>>>
>>>>
>> ------------------------------**------------------------------**----------
>>>>>> For information about J forums see
>>>> http://www.jsoftware.com/**forums.htm<
>> http://www.jsoftware.com/forums.htm>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Devon McCormick, CFA
>>>>> ^me^ at acm.
>>>>> org is my
>>>>> preferred e-mail
>>>>> ----------------------------------------------------------------------
>>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>>
>>>> ----------------------------------------------------------------------
>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>>
>>>
>>>
>>>
>>> --
>>> Devon McCormick, CFA
>>> ^me^ at acm.
>>> org is my
>>> preferred e-mail
>>> ----------------------------------------------------------------------
>>> 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
More information about the Programming
mailing list