Пример #1
0
 /// <summary>
 /// 垂直方向连接张量,加在下方,外层列数必须一致
 /// </summary>
 /// <param name="down"></param>
 /// <param name="name"></param>
 /// <returns></returns>
 public Tensor VerticalConcat(Tensor down, string name = null)
 {
     if (this.DimensionY != down.DimensionY)
     {
         throw new Exception("要连接的张量外层维度不一致");
     }
     //Matrix<double>[,] newStorage = new Matrix<double>[this.DimensionX + down.DimensionX, this.DimensionY];
     //for (int i = 0; i <= this.DimensionX - 1; i++)
     //{
     //    for (int j = 0; j <= this.DimensionY - 1; j++)
     //    {
     //        newStorage[i, j] = this.Storage[i, j];
     //    }
     //}
     //for (int i = 0; i <= down.DimensionX - 1; i++)
     //{
     //    for (int j = 0; j <= this.DimensionY - 1; j++)
     //    {
     //        newStorage[i + this.DimensionX, j] = down.Storage[i, j];
     //    }
     //}
     return(TensorBuilder.FromRowMajorIEnumerable(DimensionX + down.DimensionX, DimensionY, Storage.ToRowArray().Concat(down.Storage.ToRowArray())));
     //return new Tensor(newStorage, name);
     //var newStorage = this.Storage.ToRowArray().Concat(down.Storage.ToRowArray());
     //return TensorBuilder.FromRowMajorIEnumerable(this.DimensionX + down.DimensionX, this.DimensionY, newStorage);
 }
Пример #2
0
        /// <summary>
        /// 外层行切片,包括下标stop处的数据
        /// </summary>
        /// <param name="start"></param>
        /// <param name="stop"></param>
        /// <param name="step"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public Tensor RowSlice(int start, int stop, int step, string name = null)
        {
            List <Matrix <double> > list = new List <Matrix <double> >();
            int x = 0;//记录新张量的外层行数

            for (int i = start; i <= stop; i = i + step)
            {
                for (int j = 0; j <= DimensionY - 1; j++)
                {
                    list.Add(Storage[i, j]);
                }
                x++;
            }
            return(TensorBuilder.FromRowMajorIEnumerable(x, DimensionY, list, name));
        }
Пример #3
0
 /// <summary>
 /// 水平方向连接张量,加在右方,外层行数必须一致
 /// </summary>
 /// <param name="right"></param>
 /// <param name="name"></param>
 /// <returns></returns>
 public Tensor HorizontalConcat(Tensor right, string name = null)
 {
     if (this.DimensionX != right.DimensionX)
     {
         throw new Exception("要连接的张量外层维度不一致");
     }
     //Matrix<double>[,] newStorage = new Matrix<double>[this.DimensionX , this.DimensionY+right.DimensionY];
     //for (int i = 0; i <= this.DimensionX - 1; i++)
     //{
     //    for (int j = 0; j <= this.DimensionY - 1; j++)
     //    {
     //        newStorage[i, j] = this.Storage[i, j];
     //    }
     //}
     //for (int i = 0; i <= this.DimensionX - 1; i++)
     //{
     //    for (int j = 0; j <= right.DimensionY- 1; j++)
     //    {
     //        newStorage[i , j+this.DimensionY] = right.Storage[i, j];
     //    }
     //}
     //return new Tensor(newStorage, name);
     return(TensorBuilder.FromRowMajorIEnumerable(DimensionX, DimensionY + right.DimensionY, Storage.ToRowArray().Concat(right.Storage.ToColumnArray())));
 }