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); }