2016-11-29 9 views
0

私は視覚的にそれぞれの2つの線系列( 'L'、 'R'という名前)を持つ12の折れ線グラフ(周波数)で表現でき、各線系列は3000 X & Y値を含んでいます。どのオブジェクトにデータを保存していますか?

enter image description here

今、私は2つのオブジェクトの私のデータを格納しています:

double[][][][] data = new double[12][2][3000][2]; 
double[] frequencies = new double[]{2.22, 2.3, 2.39, 
2.48, 2.57, 2.67, 2.77, 2.89, 3.0, 3.18, 3.37, 3.57}; 

私は1つのオブジェクトに私のデータを保存したいが、私はこれを行うことができますかわかりません。 いくつかの擬似コード:

double[][] xyValues = getXYValuesFromData(2.3, 'L'); 

アップデート:すべてのあなたのアイデアを

おかげ

List<Object[]> data = new ArrayList<Object[]>(); 
double[][] xyValues = new double[3000][2]; 
data.add{2.22, 'L', xyValues}; 
data.add{2.22, 'R', xyValues}; 
data.add{2.3, 'L', xyValues}; 
data.add{2.3, 'R', xyValues}; 
.... 

それから私は、パラメータの周波数とラインシリーズを指定することにより、X & Y値の配列を取得します。私は自分の要求事項を改訂しました。

import java.util.ArrayList; 
import java.util.Random; 

public class Test { 

public static void main(String[] args) { 

    //class for storing my data 
    ScanData myData = new ScanData(); 

    //-----------------------adding data------- 
    //There are 4 possible series(L, R, I, V), I want put them independently, 
    // so e.g. I can put just any one or any two 
    myData.put(2.22, 'L', new XYvalues()); 
    myData.put(2.22, 'R', new XYvalues()); 
    myData.put(2.22, 'I', new XYvalues()); 
    myData.put(2.22, 'V', new XYvalues()); 

    myData.put(2.48, 'I', new XYvalues()); 
    myData.put(3.57, 'I', new XYvalues()); 

    //----------------------getting data-------- 
    //get xyValues of first frequency in my data and R-serie: 
    double[][] xyValuesRserie = myData.freqIndex(0).r(); 
    //get frequency value of first frequency: 
    double freq = myData.freqIndex(0).freq(); //2.22 

    //get xyValues of l-serie by frequency value 
    double[][] array = myData.freq(5.22).l();//[3000][2] 
} 

} 

class XYvalues{ 

double[][] XYValues(){ 

    double[][] xyValues = new double[3000][2]; 
    Random random = new Random(); 

    for (int i=0; i< xyValues.length; i++){ 
     xyValues[i][0] = (double) (i - xyValues.length/2)*10; 
     xyValues[i][1] = (double) random.nextDouble(); 
    } 

    return xyValues; 

} 

} 

class ScanData{ 

//????? 

} 
+0

をお使いの4D配列(データ)が保存されて何? – user3437460

+0

私の4D配列について:frequency、series、datapoints2d(xy) –

+0

私のケースは、2つの値の複雑なキーを持つハッシュテーブルのようです:周波数とセリフ名 –

答えて

0

なぜオブジェクトを使用しないのですか?

免責事項:これはJavaではなくC#コードですが、基本的に同じ原則が適用されます。

class DataPoint { 
    public double Frequency {get; set;} 
    public double Left {get; set;} 
    public double Right {get; set;} 
    public DataPoint(double freq, double l, double r) { 
     Frequency = freq; 
     Left = l; 
     Right = r; 
    } 
    //Can insert sorting comparator functions here 
    // and inherit from IComparable for sorting in lists 
} 

List<DataPoint> dataset = new List<DataPoint>(); 
dataset.add(new DataPoint(2.22, 1234, 5678)); 
dataset.add(new DataPoint(2.3, 9876, 5432)); 

//Trying to get doubles based on equality can fail due to how doubles are stored, 
// consider doing an absolute difference with some epsilon. 
DataPoint point = dataset.Find(p => p.Frequency == 2.22); 
double left = point.Left; 
double right = point.Right; 

はもちろん、(例えば12個のデータセットの管理など)のニーズのための構造について詳しく説明して自由に感じるが、これは前方方法することができます。

+0

これはJavaでコンパイルできますか? – user3437460

+0

母、私はC#を考えていた!同じコンセプトが適用されます –

0

あなたの説明にあなたが持っているものについて何が書かれているかはどうですか?私は視覚的に(「R」、「L」という)それぞれに2ライン直列で12本の折れ線グラフ(周波数)として表され、各ラインシリーズX & 3000 Yは

値が含まれることができるデータを有する

List<LineChart> lineCharts = new ArrayList<>(12); 

折れ線グラフは明らかに、(私は平均左右想定さLとR、)、および2つのラインシリーズ、周波数

が含まれています

は、だから、12本の折れ線グラフを持っています

public class LineChart { 
    private double frequency; 
    private LineSerie leftSerie; 
    private LineSerie rightSerie; 
    // ... 
} 

ラインセリエ3000 X & Y値含ま:

public class LineSerie { 
    private List<Point> values; 
    // ... 
} 

点はXおよびY

public class Point { 
    private double x; 
    private double y; 

    // ... 
} 

が含まそしてIによりX & Y値の配列を取得しますパラメータ周波数と線系列を指定する

そうするよ

LineSerie lineSerie = 
    lineCharts.stream() 
       .filter(chart -> chart.getFrequency() == 2.3) 
       .findAny() 
       .map(LineChart::getLeftSerie) 
       .orElseThrow(() -> new IllegalStateException("no chart with frequency 2.3"); 
0

はい、あなたは1つのクラスに格納することができます。そのクラスはLineChart命名されてみましょう:

//for example only 
public class Runner{ 
    public static void main(String[] args){ 
     ArrayList<LineChart> charts = new ArrayList<Linechar>(); 
     charts.add(new LineChart()); //add your 12 line charts here.. 
    } 
} 

public class LineSeries 
{ 
    private String name;   //e.g "L", "R" 
    private List<Point> points; //to store your 3000 x,y points 

} 

public class LineChart 
{ 
    private List<LineSeries> lineSeriesList; //to store your "L"/"R" line series 
} 
1

私は別々のクラスでこれを分割することは、あなたのために物事を簡単にするだろうと思います。マップを使用すると、すべてのチャートを同じオブジェクトにまとめ、頻度別にグラフを簡単に取得できます。ここで

class Chart { 
    final double[] leftData; 
    final double[] rightData; 

    Chart(double[] leftData, double[] rightData) { 
     this.leftData = leftData; 
     this.rightData = rightData; 
    } 
} 

あなたがオブジェクトにデータを記入する方法を次のとおりです。

Map<Double, Chart> charts = new HashMap<>(); 
charts.put(2.22, new Chart(<leftData goes here>, <rightData goes here>)); 
charts.put(2.3, new Chart(<leftData goes here>, <rightData goes here>)); 

後で、このようにデータを読み取ることができます。

Chart chart = charts.get(2.22); 
double[] leftData = chart.leftData; 
double[] rightData = chart.rightData; 
+0

ところで、チャートを追加した順序にするには、LinkedHashMapを使用することができます。 – Einar

+0

アイデアのためのThx。しかし、それほどうまくいきません。 –

関連する問題