0

Jに取り組んでいます。

この行列を変換するにはどうすればよいですか:

   (i.10)*/(i.10)
0 0  0  0  0  0  0  0  0  0
0 1  2  3  4  5  6  7  8  9
0 2  4  6  8 10 12 14 16 18
0 3  6  9 12 15 18 21 24 27
0 4  8 12 16 20 24 28 32 36
0 5 10 15 20 25 30 35 40 45
0 6 12 18 24 30 36 42 48 54
0 7 14 21 28 35 42 49 56 63
0 8 16 24 32 40 48 56 64 72
0 9 18 27 36 45 54 63 72 81

配列で?

0 0  0  0  0  0  0  0  0  0  0 1  2  3  4  5  6  7  8  9 . . .

私は試した

(i.10)*/(i.10)"0

そして、私は追加しました

~.(i.10)*/(i.10)"0

ダブルスを排除しますが、うまくいきません。

4

1 に答える 1

2

2 次元のテーブル (行列) を 1 次元のリスト (ベクトルまたは「配列」、ただし J の世界では「配列」は通常、「任意の数 [N] 次元の四角形」を意味します) に変換する場合は、次のようにします。ラヴェル ( ,) を使用できます:

   matrix =: (i.10)*/(i.10)
   list  =: , matrix

   list
0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 ...

nub (~.) を使用して重複を削除するようになりました。

   ~. list
0 1 2 3 4 5 6 7 8 9 10 12 ...

J では、通常、配列の形状が重要な情報を運ぶことに注意してください。したがって、このような行列の平坦化はかなり珍しいことです。それでも、あなたを止めるものは何もありません。

ところで、副詞を使用することでキーストロークを節約できます~。これにより、ダイアドの左引数が右側にもコピーされるため、次のように言うことができます。

   matrix =: */~ i. 10

と同じ結果が得られ(i.10) */ (i.10)ます。

于 2013-07-08T23:49:29.587 に答える