4

私はこのコードを持っています

((⍳3)∘.+(⍳2))

次の行列を生成します

2 3 
3 4 
4 5 

結果の各一意の要素の出現、つまり結果の2、3、4、5の出現を見つけたいと思います。

「∘.=」をマトリックス自体で使用してから、各サブマトリックスの要素が次を使用して行に変換されるように再形成してみました

6 6⍴ ((⍳3)∘.+(⍳2))∘.=((⍳3)∘.+(⍳2))

次の結果が得られます

1 0 0 0 0 0 for 2
0 1 1 0 0 0 for 3
0 1 1 0 0 0 for 3
0 0 0 1 1 0 for 4
0 0 0 1 1 0 for 4
0 0 0 0 0 1 for 5

ご覧のとおり、重複したアイテムの合計がまだ含まれており、今のところ迷っています。どんな助けでも大歓迎です。

4

2 に答える 2

3

∘.=次のように、マトリックス内の一意の要素とすべての要素のフラット ベクトルの間で行う必要があります。

      m ← ((⍳3)∘.+(⍳2))
      (∪,m) ∘.= ,m
1 0 0 0 0 0
0 1 1 0 0 0
0 0 0 1 1 0
0 0 0 0 0 1

次に+/、それを実行して、の周波数を取得します∪,m

      +/ (∪,m) ∘.= ,m
1 2 2 1
      ∪,m
2 3 4 5

(GNU APLでテスト済み。)

于 2014-08-03T14:17:54.530 に答える