From 5cc52e4c3ec1a727014afcbac2a4e925e37c9d33 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Tue, 1 Sep 2020 10:38:08 -0400 Subject: =?UTF-8?q?Add=20=E2=8D=89=20inverse=20to=20runtime?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/r.bqn | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/src/r.bqn b/src/r.bqn index eb84c72c..de302385 100644 --- a/src/r.bqn +++ b/src/r.bqn @@ -106,6 +106,10 @@ Transpose←{ l←≠𝕩 ⋄ m←1×´c←1 Cell 𝕩 (c⥊↕m)(+⟜(m⊸×)⊑(⥊𝕩)˜)⌜↕l }⍟(0<=) +TransposeInv←{ + r←1-˜=𝕩 ⋄ s←≢𝕩 ⋄ l←r⊑s ⋄ c←⊑⟜s⌜↕r + (↕l)(+⟜(l⊸×)⊑(⥊𝕩)˜)⌜c⥊↕1×´c +}⍟(0<=) SelSub←{ "Right argument to Select must be an array" ! IsArray 𝕨 @@ -410,12 +414,13 @@ _search←{ # 0 for ∊˜, 1 for ⊐ ⟩ ToArray𝕩 } } +PermInv ← 1¨⊸GroupOrd _self←{ "Unique mask argument must have rank at least 1" ! 1≤=𝕩 g←⍋𝕩 - (1¨⊸GroupOrd g) ⊏ g 𝔽 0⊸<◶⟨1,-⟜1≢○(⊑⟜(g⊏<˘⍟(1<=)𝕩))⊢⟩⌜↕≠𝕩 + (PermInv g) ⊏ g 𝔽 0⊸<◶⟨1,-⟜1≢○(⊑⟜(g⊏<˘⍟(1<=)𝕩))⊢⟩⌜↕≠𝕩 } -SelfClas ← (1¨⊸GroupOrd∘⍋∘/˜⊏˜1-˜+`∘⊢) _self +SelfClas ← (PermInv∘⍋∘/˜⊏˜1-˜+`∘⊢) _self Find←{ r←=𝕨 "Find left argument rank cannot exceed right argument rank" ! r≤=𝕩 @@ -426,16 +431,27 @@ Find←{ ∊ ← ⊢_self ⊘ (0 _search˜) ⍷ ← ∊⊸/ ⊘ Find -ReorderAxes←{ - 𝕩↩<⍟(0=≡)𝕩 +ReorderChk←{ "Left argument to Reorder Axes must have rank at most 1" ! 1≥=𝕨 - 𝕨↩⥊𝕨 "Reorder Axes left argument length must not exceed right argument rank" ! 𝕨≤○≠≢𝕩 "Reorder Axes left argument must consist of natural numbers" ! ∧´Nat⌜⥊𝕨 +} +ReorderAxesSub←{ + (𝕨⊸⊏Pick𝕩˜)⌜↕⌊´⌜𝕨⊔≢𝕩 +} +ReorderAxes←{ + 𝕨 ReorderChk 𝕩 + 𝕨↩⥊𝕨 r←(=𝕩)-+´¬∊𝕨 "No such axis in Reorder Axes" ! ∧´𝕨