以下のプログラムをコンパイル・実行しました。
コンパイルによりエラーは表示されませんでしたが、
実行については処理が完了しないまま何も表示されなくなりました。
どのような原因が考えられるでしょうか。
プログラムのどこかに無限ループとなっている箇所などがあるのでしょうか。
csvファイルは、1列目にラベルがあり、それ以降の列にデータが入っているとします。
環境はWindowsのコマンドプロンプトです
(追記)
クラスを一つ記述し忘れていました。下に追加しました。
java
import java.nio.file.Files; import java.nio.file.Paths; import java.nio.charset.StandardCharsets; import java.io.IOException; import java.util.Arrays; import java.lang.Math; public class CsvDatasetReader { public static void main(String[] args) { Dataset dataset = readDataset("scurve.csv"); System.out.println(dataset.getNumSamples()); System.out.println(dataset.getNumDimensions()); System.out.println(dataset.getLabel(0)); System.out.println(dataset.getFeature(0,2)); System.out.println(dataset.getLabel(499)); System.out.println(dataset.getFeature(499,2)); } public static Dataset readDataset(String filename){ try { String[] lines = Files.readAllLines(Paths.get(filename), StandardCharsets.UTF_8).toArray(new String[0]); int numSamples = 0; //行数の取得 while (lines != null){ numSamples++; } String[] numD = lines[0].split(","); //列数の取得 int numDimensions = (numD.length - 1); String[] labels = new String[numSamples]; double[][] features = new double[numSamples][numDimensions]; for (int i=0;i<numSamples;i++) { String[] values = lines[i].split(","); labels[i] = values[0]; Arrays.fill(features[i], 0.0); for(int j = 0;j < Math.min(numDimensions,values.length - 1); j++){ features[i][j]=Double.parseDouble(values[1+j]); } } return new Dataset(labels,features); } catch (IOException e){ e.printStackTrace(); return new Dataset(); } } }
java
public class Dataset { private double[][] features; private String[] labels; private int numSamples; private int numDimensions; Dataset() { this.numSamples = -1; this.numDimensions = -1; } Dataset(String[] labels, double[][] features) { this.labels = labels; this.features = features; this.numSamples = features.length; this.numDimensions = features[0].length; } public void updateFeature(int sid, int did, double value) { if (sid >= 0 && sid < numSamples && did >= 0 && did < numDimensions) { this.features[sid][did] = value; } } public void updateLabel(int sid, String label) { if (sid >= 0 && sid < numSamples) { this.labels[sid] = label; } } public double getFeature(int sid, int did) { if (sid >= 0 && sid < numSamples && did >= 0 && did < numDimensions) { return this.features[sid][did]; } return 0; } public String getLabel(int sid) { if (sid >= 0 && sid < numSamples) { return this.labels[sid]; } return ""; } public int getNumSamples() { return this.numSamples; } public int getNumDimensions() { return this.numDimensions; } public boolean isEmpty() { if (this.numSamples <=0 || this.numDimensions <= 0) { return true; } return false; } }
まだ回答がついていません
会員登録して回答してみよう