Exemplo n.º 1
0
        public static InternalArray FromTHFloatTensor(IntPtr tensor)
        {
            var dims = THWrapper.THFloatTensor_nDimension(tensor);

            int[] d = new int[dims];
            for (int i = 0; i < dims; i++)
            {
                d[i] = (int)THWrapper.THFloatTensor_size(tensor, i);
            }
            InternalArray ret = new InternalArray(d);

            if (dims == 2)
            {
                for (int i = 0; i < d[0]; i++)
                {
                    for (int j = 0; j < d[1]; j++)
                    {
                        ret.Set2D(i, j, THWrapper.THFloatTensor_get2d(tensor, i, j));
                    }
                }
            }
            if (dims == 3)
            {
                for (int k = 0; k < d[0]; k++)
                {
                    for (int i = 0; i < d[1]; i++)
                    {
                        for (int j = 0; j < d[2]; j++)
                        {
                            ret.Set3D(k, i, j, THWrapper.THFloatTensor_get3d(tensor, k, i, j));
                        }
                    }
                }
            }
            if (dims == 4)
            {
                for (int k1 = 0; k1 < d[0]; k1++)
                {
                    for (int k = 0; k < d[1]; k++)
                    {
                        for (int i = 0; i < d[2]; i++)
                        {
                            for (int j = 0; j < d[3]; j++)
                            {
                                ret.Set4D(k1, k, i, j, THWrapper.THFloatTensor_get4d(tensor, k1, k, i, j));
                            }
                        }
                    }
                }
            }

            ret.UpdateOffsets();
            return(ret);
        }