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);
	}
	・
	・
	・
}



関連ページ一覧

Eclipse プロジェクトのMaven化〜ワンポイントレッスン的な〜

EclipseのJavaプロジェクトをMaven化ます。

通常のプロジェクトはPOMファイルがありません。下のような感じです。

そして、これをMaven下するのにはわけがあります。

「便利なライブラリ簡単にインストールしたい!」

というわけです。手順は以下の通り

<手順>

  1. Mevenプロジェクトを作成する
  2. POMファイルを修正する
  3. Maven install ※最近のEclipseは保存時に走るっぽい

関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

IntelliJ IDEA

  1. IntelliJ IDEA 環境構築 〜インストールと起動〜
  2. IntelliJ IDEA GitGitリポジトリからクローン〜
  3. IntelliJ IDEA 使い方〜Git接続 Java起動 etc
  4. IntelliJ IDEA Jarファイルを作る
  5. IntelliJ IDEA 使い方〜Maven Projectの作成〜
  6. IntelliJ IDEA 使い方〜Mavenでライブラリを追加する〜
  7. IntelliJ IDEA 使い方〜Javaのコンパイルレベル設定〜
  8. IntelliJ IDEA Gradleセットアップ〜コマンド入力部の表示〜
  9. IntelliJ IDEA Discord Botを作る〜Gradle環境のセットアップ〜



JavaFX ワンポイント 〜升目状にNodeを配置する〜

以下のような感じでNodeを配置できます。緑色の部分には50x50のラベル(Image付き)を4x4マスで並べました。

<ソース>

String lightGrass = "grass_light.png";
String deepGrass = "grass_deep.png";
String soilBasic = "soil_basic.png";
GridPane grid = new GridPane();
grid.add(createImageLbl(lightGrass), 0, 1);
grid.add(createImageLbl(lightGrass), 0, 2);
grid.add(createImageLbl(lightGrass), 0, 3);
grid.add(createImageLbl(lightGrass), 0, 4);
grid.add(createImageLbl(lightGrass), 1, 1);
grid.add(createImageLbl(lightGrass), 1, 2);
grid.add(createImageLbl(lightGrass), 1, 3);
grid.add(createImageLbl(lightGrass), 1, 4);
grid.add(createImageLbl(lightGrass), 2, 1);
grid.add(createImageLbl(lightGrass), 2, 2);
grid.add(createImageLbl(lightGrass), 2, 3);
grid.add(createImageLbl(lightGrass), 2, 4);
grid.add(createImageLbl(lightGrass), 3, 1);
grid.add(createImageLbl(lightGrass), 3, 2);
grid.add(createImageLbl(lightGrass), 3, 3);
grid.add(createImageLbl(lightGrass), 3, 4);
vBox.getChildren().add(grid);

lightGrass(ラベル, 位置(X), 位置(Y));のように設定します。

なので、上のソースを以下のように修正すると。。。

GridPane grid = new GridPane();
grid.add(createImageLbl(lightGrass), 0, 1);
grid.add(createImageLbl(lightGrass), 0, 2);
grid.add(createImageLbl(lightGrass), 0, 3);
grid.add(createImageLbl(lightGrass), 0, 4);
grid.add(createImageLbl(deepGrass), 1, 1);
grid.add(createImageLbl(deepGrass), 1, 2);
grid.add(createImageLbl(deepGrass), 1, 3);
grid.add(createImageLbl(deepGrass), 1, 4);
grid.add(createImageLbl(soilBasic), 2, 1);
grid.add(createImageLbl(lightGrass), 2, 2);
grid.add(createImageLbl(lightGrass), 2, 3);
grid.add(createImageLbl(lightGrass), 2, 4);
grid.add(createImageLbl(lightGrass), 3, 1);
grid.add(createImageLbl(soilBasic), 3, 2);
grid.add(createImageLbl(lightGrass), 3, 3);
grid.add(createImageLbl(lightGrass), 3, 4);
vBox.getChildren().add(grid);

座標で位置を示します。座標 = (X, Y) = (0, 1) => 0,1の位置テキストフィールドの下あたりにあります。

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

JavaFXでハローワールド〜OpenCVまで

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine〜

Git

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜


Stepup Programing〜 Java Fxで四則計算3〜

イントロダクション

前回は「四則計算」と称して足し算を行いました

話が途中で「不思議な設定」が適用されているのですが、まぁお付き合いください(笑) そんなわけでその続きがあります。「その他の掛け算などに関しては以下の情報が入っております。※事の発端は下を参照

「村人A」

『中ボスを倒すために、こちらでも色々と用意がありますすけぇ、下のアイテムを持って行っておくんなせぇ』

アイテム(API部品)

ChoiceBox(Gitにソースあり)

武器(文法)

Javaでの計算するときの書き方です。

int num1 = 1;
int num2 = 2;
int anser = 0;
// 足し算
answer = num1 + num2;
// 引き算
answer = num1 - num2;
// 掛け算
answer = num1 * num2;
// 割り算
answer = num1 / num2;

細かい部分に関してはこちらに記載しています。

Java Basic Level2 〜Arithmetic Calculate〜

「村人A」『ほんじゃ〜よろしくおねげぇします、気をつけておくんなせぇ』

そんなわけで。。。

後の戦いは見守ることにしましょう。しかし、ステップアッププログラミングは続きます。「不思議な設定」で言うなら

「基本装備」を揃えてもらいます。

武器その1(IF文)

条件分岐での処理です。イベント処理の実装部分にて使用しています。

if ("input1".equals(node.getId())) {
	TextField t1 = (TextField) node;
	String input = t1.getText();
	numbers.add(new Integer(input));
} else if("input2".equals(node.getId())) {
	TextField t2 = (TextField) node;
	String input = t2.getText();
	numbers.add(new Integer(input));
} else if("answer".equals(node.getId())) {
	Label anser = (Label) node;
	Integer in1 = numbers.get(0);
	Integer in2 = numbers.get(1);
	int kotae = in1 + in2;
	anser.setText(String.valueOf(kotae));
}

「node」のIdが"???"だったら〜と言う処理です。

if ("test".equals("tess")) {
   System.out.println("例文1");
} else if ("tess".equals("test") {
  System.out.println("IF文のサンプル");
} else {
  System.out.println("タイガーマスク");
}

「もし、"test"と"tess"がイコールの場合、『例文1』」

と言うのが頭の部分の処理をを日本語にして見たものです。

雑魚キャラAとBが現れた!

「雑魚キャラA」『へへへ。。。IF文が使えないと俺は倒せねぇぞ?』

「雑魚キャラB」『アヘアヘ。。。もし、変数numが1だったら"ピンクレンジャー"と表示するプログラムを作ってミロォ、アヘアヘアヘ。。。』

それじゃ、退治の方はよろしくお願いします。

でわでわ。。。








JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜

FXMLで追加したボタンに。。。

onAction属性でメソッドを割り当てる。

<FXML>コピーして作成したファイルを開くと上のような画面が見れます。

<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.*?>
<BorderPane prefHeight="186.0" prefWidth="562.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="zenryokuservice.opencv.fx.tutorial2.FourierController">
<left>
<VBox alignment="CENTER">
<padding>
<Insets left="10" right="10" />
</padding>
   <children>
   <ImageView fx:id="originalImage" />
   </children>
</VBox>
</left>
<right>
<VBox alignment="CENTER" spacing="10">
<padding>
<Insets left="10" right="10" />
</padding>
   <children>
   <ImageView fx:id="transformedImage" />
   <ImageView fx:id="antitransformedImage" />
   </children>
</VBox>
</right>
<bottom>
<HBox alignment="CENTER" prefHeight="77.0" prefWidth="582.0" spacing="10">
<padding>
<Insets bottom="25" left="25" right="25" top="25" />
</padding>
   <children>
   <Button alignment="center" onAction="#loadImage" text="Load Image" />
   <Button fx:id="transformButton" alignment="center" disable="true" onAction="#transformImage" prefHeight="27.0" prefWidth="110.0" text="Apply transformation" />
   <Button fx:id="antitransformButton" alignment="center" disable="true" onAction="#antitransformImage" prefHeight="27.0" prefWidth="94.0" text="Apply anti transformation" />
            <Button fx:id="exeButton" mnemonicParsing="false" text="Execute" onAction="#execute" />
            <SplitMenuButton fx:id="selectorBox" mnemonicParsing="false" prefHeight="27.0" prefWidth="93.0" text="Method">
              <items>
                <MenuItem mnemonicParsing="false" text="Action 1" />
                <MenuItem mnemonicParsing="false" text="Action 2" />
              </items>
            </SplitMenuButton>
   </children>
</HBox>
</bottom>
   <top>
      <Label fx:id="messageLbl" alignment="TOP_CENTER" prefHeight="19.0" prefWidth="361.0" textAlignment="CENTER" BorderPane.alignment="CENTER" />
   </top>
</BorderPane>

上の赤い字の部分が追加したコンポーネントです。対象はボタンのみです。

<対象のボタン>

@FXML
private Button exeButton;

<そして対応するメソッド>

/**
* FXMLファイルにこのメソッドをonAction属性に指定している。
*/
@FXML
public void execute() {
System.out.println("Hello JavaFX");
}

<実行結果>

関連ページ一覧

  1. EclipseにSceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  4. ステップアッププログラミング〜Java FxでHelloWorld解説〜

開発環境構築

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. Java OpenCV 環境セットアップ(on Mac)
  3. Eclipse SceneBuilderを追加する
  4. JavaFX SceneBuilder EclipseSceneBuilder連携~









JavaFX LineChart 〜グラフを描く、ワンポイントレッスン的な〜

LineChartクラスを使用して以下のようなグラフを描きます。

はっきり言ってコピペで作成しました。参照元はOracleのドキュメントです。

もともと作成していた部分に追加して作成しました。ちなみに散布図もありました。

ポイントは以下のように、縦軸と横軸の内容を定義(区別)しているところだと思います。

final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();

あとは、値を代入して行く形で実装完了!Gitでソースをみれます

// 盾と横軸の設定
final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("Month");       
// チャート(グラフ)
final LineChart<String,Number> lineChart = 
        new LineChart<String,Number>(xAxis,yAxis);
// グラフのタイトル        
lineChart.setTitle("Stock Monitoring, 2010");
// グラフの値を設定する
XYChart.Series series = new XYChart.Series();
series.setName("My portfolio");

series.getData().add(new XYChart.Data("Jan", 23));
series.getData().add(new XYChart.Data("Feb", 14));
series.getData().add(new XYChart.Data("Mar", 15));
series.getData().add(new XYChart.Data("Apr", 24));
series.getData().add(new XYChart.Data("May", 34));
series.getData().add(new XYChart.Data("Jun", 36));
series.getData().add(new XYChart.Data("Jul", 22));
series.getData().add(new XYChart.Data("Aug", 45));
series.getData().add(new XYChart.Data("Sep", 43));
series.getData().add(new XYChart.Data("Oct", 17));
series.getData().add(new XYChart.Data("Nov", 29));
series.getData().add(new XYChart.Data("Dec", 25));

vBox.getChildren().add(lineChart);
// データのセット
lineChart.getData().add(series);

関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜



Java Network URL〜ワンポイントレッスン的な〜

java.net.URLの使い方

private static URL createURL() {
    // URLを指定する
    String targetUrl = "http://zenryokuservice.com/wp/";
    URL url = null;
    URLConnection connect = null;
    try {
        // 文字列のURLからクラスを生成
        url = new URL(targetUrl);
        // 接続する
        connect = url.openConnection();
        // ロードするときの設定を行う
        connect.setRequestProperty("User-Agent", "Mozilla/5.0");
        // 読み込みの設定
        connect.setDoInput(true);
        BufferedReader read = new BufferedReader(new InputStreamReader(connect.getInputStream()));
        sysoutReader(read);
    } catch(MalformedURLException e) {
        e.printStackTrace();
    } catch(IOException ie) {
        ie.printStackTrace();
    }
    return url;
}

これでHTMLファイルをダウンロードできました。


関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

JavaFX関連ページ

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
  4. Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine

JavaFX + ND4Jで機械学習準備

  1. JavaFX + ND4J〜数学への挑戦1:ND4Jのインストール〜
  2. JavaFX + ND4J〜数学への挑戦2: 行列の計算〜
  3. Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

JavaFX ボタンのアクション〜イベント処理の実装方法ワンポイントレッスン的な〜

ボタンを押下した時の実装方法

Button viewChangeBtn = new Button("画面切り替え");
viewChangeBtn.setOnKeyPressed(new EventHandler() {
	@Override
	public void handle(KeyEvent event) {
            // イベント処理
	}
});

<注意>

インポートする時に「javafx.scene.input.KeyEvent」ではないawtなどにあるKeyEventをインポートするとビルドエラーが出る。

JavaFXでのボタン関連チュートリアル









Java インターフェース〜Mapの使い方 ワンポイントレッスン的な〜

Mapインターフェースはキーと値をセットにして使用するクラスです(インターフェースクラス)

やっぱりソースで語ります。こんな感じです。

public static void main(String[] args) {
	Map<String, Integer> hashMap = new HashMap<String, Integer>();
	hashMap.put("C", new Integer(3));
	hashMap.put("B", new Integer(2));
	hashMap.put("A", new Integer(1));
	hashMap.forEach(new BiConsumer<String, Integer>() {
		@Override
		public void accept(String t, Integer u) {
			System.out.println("Key: "+ t + " / Value: " + u);
		}
	});;
	Map<String, Integer> linkedMap = new TreeMap<String, Integer>();
	linkedMap.put("C", new Integer(3));
	linkedMap.put("B", new Integer(2));
	linkedMap.put("A", new Integer(1));
	linkedMap.forEach(new BiConsumer<String, Integer>() {
		@Override
		public void accept(String t, Integer u) {
			System.out.println("Key: "+ t + " / Value: " + u);
		}
	});;
}

<実行結果>

昔のMapはTreeMapはコレクション・フレームワーク側でソート(並べ替え)をしてくれていたんだけど、今はHashMappもソートしてくれるようで。。。

ほぼ違いがない、

<ポイント>

Map<キー, 値>で宣言します。キーと値をセットして取り出したり登録したり。。。こんな感じで使用します。Gitにソースをアップしています。



Java インターフェース 〜Listの使い方、ワンポイントレッスン的な〜

イントロダクション

Javaの場合、インターフェースはよく使うもので「List」と「Map」があります。

Listインターフェース

インターフェースは実体を持たないクラスです。。。と記載しても意味がわからないと思います。コードで語りましょう。

public static void main(String[] args) {
  /* 配列(String[]型)のリストList<E>の
   * Eはエレメント(要素)で実際はなんでも良い
   */
  List<String> list1 = new ArrayList<String>();
  // 要素を順番に登録するLinkさせてリストを作ります。
  List<String> list2 = new LinkedList<String>();
}

正直、LinkedListをうまく説明できていないと思います。現状ではとりあえず『「ArrayList」と違うんだな!』と理解していただければ。。。

ArrayListLinkedListを比較してみましたが、結果は変わりませんでした。

テスト実行したソースはGitにアップしました。

早い話

インターフェース(List)を実装しているクラスは全く関係のないクラスだったとしてもListとして使用できるということです。

処理スピードが違うという噂を聞きましたが、この違いは大量データを厚勝つ時にはList, MapよりもHashTableを使用する方が良いと思っているので、考えたことがありませんです。。。