The line
   y1=. y#~ s=.~:y   
in f1 should be simplified to 
   y1=. ~.y



----- Original Message -----
From: Roger Hui <[EMAIL PROTECTED]>
Date: Thursday, September 18, 2008 9:27
Subject: Re: [Jprogramming] Verb Sequence or Ranking problem?
To: Programming forum <[email protected]>

> f0=: 4 : '+/x=/y'
> 
> f1=: 4 : 0
>  y1=. y#~ s=. ~:y
>  i=. /:y1,x
>  b=. i<#y1
>  (y1 i. y){(#;._1 b) (b#i)}y1
> )
> 
> f1a=: 4 : 0  NB. same as f1 if y has unique elements
>  i=. /:y,x
>  b=. i<#y
>  (#;._1 b) (b#i)}y
> )
> 
> The value of f1a comes the insight that it offers.
> It is only slightly more efficient than f1.
> 
>    x=: 1e4 [EMAIL PROTECTED] 100
>    y=: 1000 [EMAIL PROTECTED] 105
>    y1=: ~.y
> 
>    x (f0 -: f1) y
> 1
>    x (f0 -: f1) y1
> 1
>    x (f0 -: f1) y1
> 1
>    x (f0 -: f1a) y1
> 1
> 
>    ts=: 6!:2 , 7!:[EMAIL PROTECTED]
> 
>    ts 'x f0 y'
> 0.0712959 1.67861e7
>    ts 'x f1 y'
> 0.000639746 135872
>    
>    ts 'x f0 y1'
> 0.00733752 2.10074e6
>    ts 'x f1 y1'
> 0.000615162 134144
>    ts 'x f1a y1'
> 0.000595886 133376
> 
> One more thing:  if you are dealing with floating point
> numbers you have to be aware that /: and thus f1 and f1a
> are not tolerant but = and thus f0 is tolerant.  That is,
> you have to be aware what is meant by "matching"
> 
> 
> 
> ----- Original Message -----
> From: Alex Rufon <[EMAIL PROTECTED]>
> Date: Thursday, September 18, 2008 7:19
> Subject: [Jprogramming] Verb Sequence or Ranking problem?
> To: Programming forum <[email protected]>
> 
> > Hi.
> > 
> > I'm still at verb sequences and I have a question which I am 
> guessing> that is more of a rank solution.
> > 
> > I have the following values:
> >    [a=: 1 1 2 2 3 5 5 5
> > 1 1 2 2 3 5 5 5
> >    [b=: 3 4 5 5 3 1 2
> > 3 4 5 5 3 1 2
> > 
> > What I wanted to do was count the number of matching numbers 
> in 
> > a that
> > are in b. So potentially, my result should be:
> > 1 0 3 3 1 2 2
> > 
> > Which if I append to the b noun, I should get:
> > 3 1
> > 4 0
> > 5 3
> > 5 3
> > 3 1
> > 1 2
> > 2 2
> > 
> > I can actually solve this by using a for loop but that's what 
> > I'm trying
> > to avoid. So I reasoned that I can count by each number like so:
> >    #I. a e. 5
> > 3
> >    #I. a e. 4
> > 0
> > 
> > Using verb sequencing, I can recode this as:
> >    a [EMAIL PROTECTED]@e. 5
> > 3
> >    a [EMAIL PROTECTED]@e. 4
> > 0
> > 
> > So far so good. Now this is where I hit a snag, I tried to use 
> > the code
> > above against b and I get the following:
> >    a [EMAIL PROTECTED]@e. each b
> > |length error
> > |   a    [EMAIL PROTECTED]@e.each b
> >    a [EMAIL PROTECTED]@e. ,.b
> > 0
> >    a [EMAIL PROTECTED]@e. every b
> > |length error
> > |   a    [EMAIL PROTECTED]@e.every b
> >    
> >    a [EMAIL PROTECTED]@e. "_ b
> > 8
> >    a [EMAIL PROTECTED]@e. "0 b
> > |length error
> > |   a    [EMAIL PROTECTED]@e."0 b
> >    a [EMAIL PROTECTED]@e. "1 b
> > 8
> >    a [EMAIL PROTECTED]@e.@> (< every b)
> > |length error
> > |   a    [EMAIL PROTECTED]@e.@>(<every b)
> >    a [EMAIL PROTECTED]@[EMAIL PROTECTED] (< every b)
> > |syntax error
> > |       [EMAIL PROTECTED]@[EMAIL PROTECTED](<every b)
> >    
> > So as you can see, I still have a long way to go. :(
> > 
> > r/Alex


----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to