教授の最初のレッスンを見逃したかもしれません。他のプログラミング言語のアイデアを忘れてしまったら、ベクトルについて学び、それらをどのように簡単に扱うことができるかをもう一度見てみると役立つかもしれません ;-)
A
1 から 7 までの数字を持つベクトルがあると仮定します: A←⍳7 A 1 2 3 4 5 6 7
ここで、値 > 3 を検索する場合は、次のようにします。
A>3
0 0 0 1 1 1 1
結果もベクトルであり、多くの操作で 2 つを簡単に組み合わせることができます。
さて、あなたの q をもう一度見てみると、「深さ」という言葉は APL で特定の意味を持っています。値 > 2 をこれらの値の「インデックス」に置き換えたいということを正しく理解していますか? さて、私が前に示したことで、これは簡単です:
A←0 1 0 0 2 3 0
(A≥2)×⍳⍴A
0 0 0 0 5 6 0
編集:多次元配列を見る: この例を見てみましょう:
A←(⍳5)∘.×⍳10
A
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
では、20 より大きい数値と 30 より小さい数値はどれですか?
z←(A>20)∧A<30
z
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 1 1 0 0 0
0 0 0 0 1 0 0 0 0 0
次に、値にそのブール値を掛けて、条件を満たすものだけを除外できます。
A×z
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 21 24 27 0
0 0 0 0 0 24 28 0 0 0
0 0 0 0 25 0 0 0 0 0
または、値の列インデックスに興味があるのではないでしょうか?
z×[2]⍳¯1↑⍴z
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 7 8 9 0
0 0 0 0 0 6 7 0 0 0
0 0 0 0 5 0 0 0 0 0
注意: このステートメントは、すべての APL 方言で機能するとは限りません。これを定式化する別の方法を次に示します。
z×((1↑⍴z)⍴0)∘.+⍳¯1↑⍴z
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 7 8 9 0
0 0 0 0 0 6 7 0 0 0
0 0 0 0 5 0 0 0 0 0
これがあなたに遊びのアイデアを与えることを願っています。一般に、ブール値を使用して数学演算で配列を操作することは、APL では非常に強力なアイデアであり、非常に長い道のりになります ;-)
また、同じものをもっと見たい場合は、FinnAPL Idiomsを見てください- 何年にもわたって成長したいくつかの便利なショートティー ;-)
再編集します。「変更されていない値を維持する」: 配列 A の例に戻る:
A←(⍳5)∘.×⍳10
A
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
20 から 30 の間の値をこれらの値の 2 乗で置き換え、他のすべての値は変更しません。
touch←(A>20)∧A<30
(touch×A*2)+A×~touch
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 441 576 729 30
4 8 12 16 20 576 784 32 36 40
5 10 15 20 625 30 35 40 45 50
あなたがその考えを理解してくれることを願っています...