/// <summary>
        /// ニューラルネットの演算結果を分かり易くIDと尤度にまとめて返す
        /// </summary>
        /// <param name="outputVector">ニューラルネットの出力ベクトル</param>
        /// <param name="productionVolume">配列の生成数(1以上かつ出力ベクトルの次元を超えないようにして下さい)</param>
        /// <returns>ID・尤度の組を配列に加工したもの<para>本クラスのIDnamesメンバがセットされていない場合は""が返ります。</para></returns>
        /// <exception cref="SystemException">要求サイズに異常があるとスロー</exception>
        /// <example>
        /// 以下にサンプルコードを示します。
        /// このコードは処理の流れを大まかに示しています。
        /// 実際にはnnclassは結合係数等をセットしなければ識別は行えません。
        /// <code>
        /// NeuralNetwork.Parameter para = new NeuralNetwork.Parameter(2, 6, 1, 1, 0.01);           // ニューラルネットのパラメータ設定
        /// NeuralNetwork nnclass = new NeuralNetwork(para);                                        // ニューラルネットクラスのインスタンス生成
        /// double[] feature10 = new double[2] { 1, 0 };                                            // 特徴ベクトル生成(XORを意識している)
        /// 
        /// IDandLikelihood[] result = nnclass.ToIDandLikelihood(nnclass.Recognize(feature10), 3);  // 出力ベクトルをリレーさせて、構造体配列に変換している
        /// </code>
        /// </example>
        private IDandLikelihood[] GetIDandLikelihood(Vector outputVector, int productionVolume)
        {
            IDandLikelihood[] ans = new IDandLikelihood[productionVolume];
            double val = double.MaxValue;

            if (productionVolume == 0 || productionVolume > outputVector.Length) throw new SystemException("要求サイズが異常です。");
            for (int i = 0; i < productionVolume; i++)  // 大きい順に並び替えながら要素番号も把握する
            {
                double max = 0.0;
                int index = -1;
                for (int k = 0; k < outputVector.Length; k++)
                {
                    if (max < outputVector[k] && val > outputVector[k])
                    {
                        max = outputVector[k];
                        index = k;
                    }
                }
                val = max;
                if (this._IDnames != null && index != -1)
                    ans[i] = new IDandLikelihood(this._IDnames[index], max);
                else
                    ans[i] = new IDandLikelihood("Non", max);
            }
            return ans;
        }
 /// <summary>
 /// 識別結果をIDと尤度で返す
 /// </summary>
 /// <param name="feature">特徴ベクトル</param>
 /// <returns>IDと尤度をセットにした識別結果</returns>
 public IDandLikelihood Discriminate(Feature feature)
 {
     IDandLikelihood ans = new IDandLikelihood();
     if (this.Ready)
     {
         Vector result = this._NNet.Recognize(feature);
         ans = this.GetIDandLikelihood(result, 1)[0];
     }
     return ans;
 }