Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于保存感知器数据的自定义类-可能未正确填充_Java_Machine Learning_Perceptron - Fatal编程技术网

Java 用于保存感知器数据的自定义类-可能未正确填充

Java 用于保存感知器数据的自定义类-可能未正确填充,java,machine-learning,perceptron,Java,Machine Learning,Perceptron,我有以下的意见 0 0 0 0 0 0 2 0 0 0 0 1 0 2 0 0 0 1 0 0 2 0 0 0 1 1 0 2 这些是用于演示的玩具值 这意味着向具有两个输出的感知器提供信息,即两个标签进入选项卡 我创建了一个类来保存一组输入和一个标签,因此我最终设想了两个数据结构,每个神经元一个,形式如下: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 0 及 该类如下所示: class Group {

我有以下的意见

 0 0 0 0 0  0 2
 0 0 0 0 1  0 2
 0 0 0 1 0  0 2
 0 0 0 1 1  0 2
这些是用于演示的玩具值

这意味着向具有两个输出的感知器提供信息,即两个标签进入选项卡

我创建了一个类来保存一组输入和一个标签,因此我最终设想了两个数据结构,每个神经元一个,形式如下:

 0 0 0 0 0  0
 0 0 0 0 1  0
 0 0 0 1 0  0
 0 0 0 1 1  0

该类如下所示:

class Group {

   public String key;
   public String[] value;

   public String getKey() {
      return key;
   }

   public String[] getValue() {
      return value;
   }

   Group(String[] splited_inputs, String k) 
   {
      this.key = k;
      this.value = splited_inputs;
   }

   @Override
   public String toString() {
      return this.key + " " + this.value;
   }
}
check it out: 0 [Ljava.lang.String;@87aac27
check it out: 0 [Ljava.lang.String;@3e3abc88
check it out: 0 [Ljava.lang.String;@6ce253f1
check it out: 0 [Ljava.lang.String;@53d8d10a
check it out: 0 [Ljava.lang.String;@e9e54c2
check it out: 0 [Ljava.lang.String;@65ab7765
check it out: 0 [Ljava.lang.String;@1b28cdfa
check it out: 1 [Ljava.lang.String;@eed1f14
check it out: 0 [Ljava.lang.String;@7229724f
check it out: 0 [Ljava.lang.String;@4c873330
我通过以下方式读取文件中的输入来填充类:

      ArrayList<Group> list = new ArrayList<>();


    /**************
     * READ INPUT *
     **************/
    BufferedReader reader = new BufferedReader(new FileReader("../PA-A-train.dat"));

    String line;//new variable
    while ((line = reader.readLine()) != null) //read the line and compare
    {
        /*********************************************************************
         * GET THE LINE, SPLIT ON THE TAB FOR LABEL VS. INPUT IDENTIFICATION *
         *********************************************************************/
        String[] label_detector = line.split("\t"); //split

        /*****************************
         * GET THE INDIVIDUAL INPUTS *
         *****************************/
        String inputs = label_detector[label_detector.length - 2];
        String[] splited_inputs = inputs.split("\\s+");

        splited_inputs = Arrays.stream(splited_inputs) //Remove null values
                .filter(s -> (s != null && s.length() > 0))
                .toArray(String[]::new); 

        //for this training datum, how many features does it have
        int number_of_inputs = splited_inputs.length;   //5     

        /************************************
         * GET THE LABEL (2nd LAYER OUTPUT) *
         ************************************/
        String trueLabel = label_detector[label_detector.length - 1];
        //System.out.println("this is the corresponding label: " + trueLabel);
        String[] splited_labels = trueLabel.split("\\s+");

        int number_of_labels = splited_labels.length;           


      list.add(new Group(splited_inputs, splited_labels[0]));



    }
    reader.close();

    for (Group p : list)
        System.out.println( "check it out: " + p.toString() );


}
所以它是在Memory中打印位置,而不是输入数组


这是因为我最初只是在内存中插入该位置,还是因为我没有对其进行迭代以正确打印它

问题出在toString()方法中:

this.value
是一个字符串数组(
String[]
),因此它的
toString()
方法返回类似于
[Ljava.lang.String;@106d69c
的内容。相反,您可以循环
此.value
并将它们连接到结果:

public String toString() {
    String result = this.key;

    for (int i = 0; i < this.value.length; i++) {
        result += " " + this.value[i];
    }

    return result;
}

输出将不会像
Arrays那样使用方括号。toString()
将使用方括号。

您不能直接调用java中数组上的
toString()
来打印内容

但是,您可以使用
Arrays.toString(Object[]arr)


这是elegent er,所以我选择了它,但两个答案都有效这是一个很好的答案-谢谢-它帮助我理解了很多-但我选择了另一个,因为它更为周全。查看更新的答案,了解另一种简洁的打印方式,但这次没有方括号(我不确定你更喜欢哪个,但这是一个很酷的技巧).
public String toString() {
    return this.key + " " + this.value;
}
public String toString() {
    String result = this.key;

    for (int i = 0; i < this.value.length; i++) {
        result += " " + this.value[i];
    }

    return result;
}
public String toString() {
    return this.key + " " + String.join(" ", this.value);
}
@Override
public String toString() {
   return this.key + " " + Arrays.toString(this.value);
}