indexing by booleans
Forum rules
This forum is for discussing APL-related issues. If you think that the subject is off-topic, then the Chat forum is probably a better place for your thoughts !
This forum is for discussing APL-related issues. If you think that the subject is off-topic, then the Chat forum is probably a better place for your thoughts !
1 post
• Page 1 of 1
indexing by booleans
In the recent sequence of posts (for example Addition on 1-Byte Integers), the game was to write a function g such that
where g does not use the function denoted by "symbol". Here, the game is to write a function h which does not use [;] or ⌷, so that:
⎕io←0 is assumed. ⎕io delenda est!
Rotate
Indexing ⍺ by a numeric index can be computed independently on each scalar index i (right rank 0). When i is boolean, the result is either the first (or only) major cell or the second major cell, that is, (1↓⍴⍺)⍴i⊖⍺.
Rotate with Transpose
Can we compute result on the index items in toto, all at once? Yes, we can. Dyadic transpose plays a key part in so doing.
As is often the case with dyadic transpose, the left argument is either ⍋something or ⍋⍋something; if one doesn't work, try the other☺. Seriously, the mnemonic is that an item of the left argument specifies where an argument axis goes rather than where a result axis comes from (thus allowing duplicate items and therefore diagonal sections).
Numeric Arrays
If the array to be indexed is numeric, it is possible to to use arithmetic to finesse the prohibition against using [;] and ⌷.
(x symbol y) ≡ x g y
where g does not use the function denoted by "symbol". Here, the game is to write a function h which does not use [;] or ⌷, so that:
x ← t[?3 19⍴≢t←(?3⍴0),'⍣⍟⌹ab',(⊂'asdf'),¯400+?7⍴1000]
y ← ?97 4 5⍴2
((⊂y)⌷x) ≡ x h y
1
x[y;;…;] ≡ x h y
1
⎕io←0 is assumed. ⎕io delenda est!
Rotate
ixr ← {(1↓⍴⍺)⍴⍵⊖⍺}⍤99 0
((⊂y)⌷x) ≡ x ixr y
1
x[y;] ≡ x ixr y
1
Indexing ⍺ by a numeric index can be computed independently on each scalar index i (right rank 0). When i is boolean, the result is either the first (or only) major cell or the second major cell, that is, (1↓⍴⍺)⍴i⊖⍺.
Rotate with Transpose
⍝
ixrt←{
r←≢⍴⍺
i←⍋⍋((≢⍴⍵)⍴1),r⍴0,r⍴1
((⍴⍵),1↓⍴⍺) ⍴ i ⍉ ⍵ ⊖⍤(0,r) ⊢ ((⍴⍵),2,1↓⍴⍺) ⍴ (1+1∊⍵)↑⍺
}
((⊂y)⌷x) ≡ x ixrt y
1
x[y;] ≡ x ixrt y
1
Can we compute result on the index items in toto, all at once? Yes, we can. Dyadic transpose plays a key part in so doing.
As is often the case with dyadic transpose, the left argument is either ⍋something or ⍋⍋something; if one doesn't work, try the other☺. Seriously, the mnemonic is that an item of the left argument specifies where an argument axis goes rather than where a result axis comes from (thus allowing duplicate items and therefore diagonal sections).
Numeric Arrays
⍝
ixn←{
r←≢c←1↓⍴⍺
x0←c⍴⍺ ⍝ (⊂0)⌷⍺ ←→ ⍺[0;;…;]
x1←c⍴(1∊⍵)↓⍺ ⍝ (⊂1)⌷⍺ ←→ ⍺[1;;…;], or (⊂0)⌷⍺ if ~1∊⍵
(x0 ×⍤(r,0)⊢ 0=⍵) + (x1 ×⍤(r,0)⊢ 1=⍵)
}
x←¯1e7+?3 19⍴3e7
((⊂y)⌷x) ≡ x ixn y
1
x[y;] ≡ x ixn y
1
If the array to be indexed is numeric, it is possible to to use arithmetic to finesse the prohibition against using [;] and ⌷.
- Roger|Dyalog
- Posts: 238
- Joined: Thu Jul 28, 2011 10:53 am
1 post
• Page 1 of 1
Who is online
Users browsing this forum: No registered users and 1 guest
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group