4

Rosetta Codeによると、APL で恒等行列を作成するには 2 つの慣用的な方法があります。

1. ID←{∘.=/⍳¨ ⍵ ⍵}
2. ID←{⍵ ⍵ ρ 1, ⍵ρ0}

(2)はどのように機能しますか?APLで慣用的なアプローチと考えられている外積を使用する(1)よりも優れているのはなぜですか?

4

3 に答える 3

6
于 2013-05-06T06:51:23.097 に答える
3

{⍵ ⍵⍴(⍵+1)↑1} ... 速い

{∘.=⍨⍳⍵} ...いいですね

;)

于 2013-08-23T13:54:59.530 に答える
3

2 つの式のパフォーマンスを比較すると、明らかに 2 の方が優れています。

cmpx'{∘.=/⍳¨ ⍵ ⍵}1000'  '{⍵ ⍵ ⍴ 1, ⍵⍴0}1000'       
  {∘.=/⍳¨ ⍵ ⍵}1000   → 2.4E¯3 |   0% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
* {⍵ ⍵ ⍴ 1, ⍵⍴0}1000 → 5.7E¯5 | -98% ⎕                                       

2 つの式を処理するときにインタープリターが何をしなければならないかを考えると、(2) もはるかに少ない作業です。スカラーを vec に連結し、結果を再形成しますが、(1) では 2 つのベクトルを作成し、外部を構築する必要があります。同等の製品。さらに、「純粋な APL」とは見なされていない「each」が含まれています...そして、2 つのアルゴリズムによって実装されたアイデアについて考えると、明らかに (2) の方がはるかに優れていてエレガントです。しかし、それは私の意見です;)

于 2013-05-06T06:57:57.797 に答える