ND4J 行列の作成、編集 〜JUNITでのAPIテスト(学習)〜

前提

行列を使用して、マッピングをしたいと思っています。単純に自分のいる場所を中心にして、移動するたびに行列の大きさを変更して行くものです。

ちなみにAPI(Application Interface)は使用するメソッドとかクラスのことです。

ND4Jって?

Deep Learning 4J でも使用する行列計算用のフレームワーク(ライブラリ)です。細かい部分は上記のリンク先に記載してあります。(英語)

兎にも角にもコードを書いてみないと始まらないので書きます。

行列の作成

作成したコードはGitにアップしてあります

初めに3x3の行列を作成する。今後は2x3(例外が出ます)とか数値の部分を変更してやれば良い。

INDArray data = Nd4j.create(new int[] {3, 3});
System.out.println("*** init ***");
System.out.println(data);

指定した部分の値を変更する

System.out.println("*** putScalar ***");
System.out.println(data.putScalar(new int[] {2, 1}, 1.0));

行列のサイズを変更する

INDArray reData = Nd4j.ones(new int[] {3, 3});
System.out.println(reData);
System.out.println(Nd4j.pad(reData, new int[] {1,  1}, Nd4j.PadMode.CONSTANT));

<出力したログ>

*** init zeros***
[[0.00,  0.00,  0.00],  
 [0.00,  0.00,  0.00],  
 [0.00,  0.00,  0.00]]
*** putScalar ***
[[0.00,  0.00,  0.00],  
 [0.00,  0.00,  0.00],  
 [0.00,  1.00,  0.00]]
*** init ones ***
[[1.00,  1.00,  1.00],  
 [1.00,  1.00,  1.00],  
 [1.00,  1.00,  1.00]]
[[0.00,  0.00,  0.00,  0.00,  0.00],  
 [0.00,  1.00,  1.00,  1.00,  0.00],  
 [0.00,  1.00,  1.00,  1.00,  0.00],  
 [0.00,  1.00,  1.00,  1.00,  0.00],  
 [0.00,  0.00,  0.00,  0.00,  0.00]]

追記

1で初期化した後に全ての値に3を足す処理

// 1の値で初期化された配列に全て3を足す
INDArray reData = Nd4j.ones(new int[] {3, 3}).addi(3);
System.out.println(reData);

<出力結果>

[[4.00,  4.00,  4.00],  
 [4.00,  4.00,  4.00],  
 [4.00,  4.00,  4.00]]

でわでわ。。。