イントロダクション
3Dモデル、機械学習など、3次元行列を使用したプログラミングがあります。これらは、Pythonというプログラミング言語で疲れている記事を見かけます。
これは、NumPyというライブラリがあり、簡単に行列、つまり多次元配列を扱えるというものです。イメージとしては、下のようなものです。
ND4Jを使う
ND4Jを使用すると、行列(多次元配列)の扱いが簡単にできます。PythonのNumPyの実装であるND4Jは、行列の操作を扱いやすくするために使用されることが多いライブラリです。
ベクトルの生成
ND4Jで配列(ベクトル)の初期化を行う(ベクトルの生成)方法です。
参考にするサイトはこちらです。(本家家元のドキュメント)英語なので翻訳して見ました。
実行結果
上のキャプチャのように、Nd4jクラスの性的メソッドで簡単に作成できます。
<サンプルコード> ※Gitからダウンロード可能
public class FirstNd4j { public static void main(String[] args) { // クラスのインスタンス化 FirstNd4j test = new FirstNd4j(); INDArray zeros5 = Nd4j.zeros(5); System.out.print("Nd4j.zeros(5) -> "); System.out.println(zeros5); // 自分で作成したメソッドを使います。 INDArray zero5_3 = test.createZeroINDArray(5, 3); System.out.print("Nd4j.zeros(5, 3) -> "); System.out.println(zero5_3); // 生成したNDArrayを3で埋める INDArray add3 = zero5_3.add(3); // 自作メソッドで表示します。 printArray("INDArray.add(3)", add3); System.out.println("*** 0-1の間で乱数を生成する(2次元配列) ***"); printArray("Nd4j.rand(2, 3)", Nd4j.rand(2, 3)); System.out.println("*** 3次元以上 ***"); printArray("Nd4j.rand(new int[] {1, 2, 3}])", Nd4j.rand(new int[] {1, 2, 3})); System.out.println("*** 平均ゼロ、標準偏差1のガウス乱数を生成する ***"); printArray("Nd4j.randn(2, 3)", Nd4j.randn(2, 3)); printArray("Nd4j.randn(new int[] {1, 2, 3}])", Nd4j.randn(new int[] {1, 2, 3})); } /** * 静的メソッドです。(staticがつきます) * このクラスを起動するときに他の読み込むクラスに同じメソッドは定義できません。 * 実行時エラーになります。 * * @param formula 表示する計算式 * @param vector ベクトル(配列) */ public static void printArray(String formula, INDArray vector) { System.out.print(formula + " -> "); System.out.println(vector); } /** * このクラスのインスタンスメソッドです。 * 0のベクトルを生成します。 * * @param row 行の数 * @param col 列の数 * @return 生成された行列 */ private INDArray createZeroINDArray(int row, int col) { return Nd4j.zeros(row, col); } ・ ・ ・ }
実行結果
http://zenryokuservice.com/wp/wp-content/uploads/2023/05/FirstND4J01.png