Indices: Difference between revisions

From NARS2000
Jump to navigationJump to search
No edit summary
No edit summary
 
Line 31: Line 31:
<p>For example, in origin-0</p>
<p>For example, in origin-0</p>


<apll>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;⍸,3<br />
<apll><pre>
0 0 0<br />
      ⍸,3
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;⍬⍬⍬≡⍸3 ⍝ for scalar S, ⍸S ←→ S⍴⊂⍬  as per the definition R/⍳⍴R<br />
0 0 0
1<br />
      ⍬⍬⍬≡⍸3 ⍝ for scalar S, ⍸S ←→ S⍴⊂⍬  as per the definition R/⍳⍴R
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;⍬≡⍸⍬<br />
1
1<br />
      ⍬≡⍸⍬
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;⍸1 0 1 1 1 0 1<br />
1
0 2 3 4 6<br />
      ⍸1 0 1 1 1 0 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;⍸'Now is the time'=' '<br />
0 2 3 4 6
3 6 10<br />
      ⍸'Now is the time'=' '
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;⍸2 3 4<br />
3 6 10
0 0 1 1 1 2 2 2 2<br />
      ⍸2 3 4
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;⍸⎕←2 3⍴⍳4<br />
0 0 1 1 1 2 2 2 2
&nbsp;0 1 2<br />
      ⍸⎕←2 3⍴⍳4
&nbsp;3 0 1<br />
0 1 2
&nbsp;0 1&nbsp; 0 2&nbsp; 0 2&nbsp; 1 0&nbsp; 1 0&nbsp; 1 0&nbsp; 1 2<br />
3 0 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;⍸1 2 3⍴⍳4<br />
0 1 0 2 0 2 1 0 1 0 1 0 1 2
&nbsp;0 0 1&nbsp; 0 0 2&nbsp; 0 0 2&nbsp; 0 1 0&nbsp; 0 1 0&nbsp; 0 1 0&nbsp; 0 1 2<br />
      ⍸1 2 3⍴⍳4
<br />
0 0 1 0 0 2 0 0 2 0 1 0 0 1 0 0 1 0 0 1 2
&nbsp;&nbsp;&nbsp;&nbsp;∇ Z←(Txt Rep) txtrep Z;a<br />
 
[1]&nbsp;&nbsp;&nbsp;⍝ Replace Txt in Z with Rep.<br />
    ∇ Z←(Txt Rep) txtrep Z;a
[2]&nbsp;&nbsp;&nbsp;:Assert 2=⍴⍴Z ⋄ :Assert (⍴Txt)≡⍴Rep<br />
[1]   ⍝ Replace Txt in Z with Rep.
[3]&nbsp;&nbsp;&nbsp;a←⍸Txt⍷Z<br />
[2]   :Assert 2=⍴⍴Z ⋄ :Assert (⍴Txt)≡⍴Rep
[4]&nbsp;&nbsp;&nbsp;Z[⊃⊃¨,¨/¨a+⊂0(0..¯1+⍴Txt)]←((⍴a),⍴Rep)⍴Rep<br />
[3]   a←⍸Txt⍷Z
&nbsp;&nbsp;&nbsp;&nbsp;<br />
[4]   Z[⊃⊃¨,¨/¨a+⊂0(0..¯1+⍴Txt)]←((⍴a),⍴Rep)⍴Rep
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Now' 'Who' txtrep 4 13⍴'Now is the time...'<br />
   
Who is the ti<br />
      'Now' 'Who' txtrep 4 13⍴'Now is the time...'
me...Who is t<br />
Who is the ti
he time...Who<br />
me...Who is t
&nbsp;is the time.</apll>
he time...Who
is the time.</pre></apll>

Latest revision as of 17:49, 15 April 2018

Z←⍸R returns a simple integer vector or nested vector of integer vectors identical to (,R)/,⍳⍴R.
R is a simple array of non-negative integers.
For vector R, Z is an integer vector. For all other ranks of R, Z is a nested vector of integer vectors. In both case the length of Z is +/,R.
For scalars or vectors, the result is equivalent to R/⍳⍴R which encapsulates a very common idiom in one symbol.
For higher rank arrays, the result extends to produce a nested vector of vectors of the indices of all the positive integer elements of R replicated as per the corresponding value in R.
This function is sensitive to ⎕IO.


For example, in origin-0

      ⍸,3
0 0 0
      ⍬⍬⍬≡⍸3 ⍝ for scalar S, ⍸S ←→ S⍴⊂⍬  as per the definition R/⍳⍴R
1
      ⍬≡⍸⍬
1
      ⍸1 0 1 1 1 0 1
0 2 3 4 6
      ⍸'Now is the time'=' '
3 6 10
      ⍸2 3 4
0 0 1 1 1 2 2 2 2
      ⍸⎕←2 3⍴⍳4
 0 1 2
 3 0 1
 0 1  0 2  0 2  1 0  1 0  1 0  1 2
      ⍸1 2 3⍴⍳4
 0 0 1  0 0 2  0 0 2  0 1 0  0 1 0  0 1 0  0 1 2

    ∇ Z←(Txt Rep) txtrep Z;a
[1]   ⍝ Replace Txt in Z with Rep.
[2]   :Assert 2=⍴⍴Z ⋄ :Assert (⍴Txt)≡⍴Rep
[3]   a←⍸Txt⍷Z
[4]   Z[⊃⊃¨,¨/¨a+⊂0(0..¯1+⍴Txt)]←((⍴a),⍴Rep)⍴Rep
    ∇
      'Now' 'Who' txtrep 4 13⍴'Now is the time...'
Who is the ti
me...Who is t
he time...Who
 is the time.