<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _gdcm_to_numpy(self, image):
 """ Converts a GDCM image to a numpy array. :param image: GDCM.ImageReader.GetImage() """

        gdcm_typemap = {
            gdcm.PixelFormat.INT8:     numpy.int8,
            gdcm.PixelFormat.UINT8:    numpy.uint8,
            gdcm.PixelFormat.UINT16:   numpy.uint16,
            gdcm.PixelFormat.INT16:    numpy.int16,
            gdcm.PixelFormat.UINT32:   numpy.uint32,
            gdcm.PixelFormat.INT32:    numpy.int32,
            gdcm.PixelFormat.FLOAT32:  numpy.float32,
            gdcm.PixelFormat.FLOAT64:  numpy.float64
        }
        pixel_format = image.GetPixelFormat().GetScalarType()
        if pixel_format in gdcm_typemap:
            self.data_type = gdcm_typemap[pixel_format]
        else:
            raise KeyError(''.join(pixel_format, \
                " is not a supported pixel format"))

        #dimension = image.GetDimension(0), image.GetDimension(1)
        self.dimensions = image.GetDimension(1), image.GetDimension(0)
        gdcm_array = image.GetBuffer()

        # GDCM returns char* as type str. This converts it to type bytes
        if sys.version_info >= (3, 0):
            gdcm_array = gdcm_array.encode(sys.getfilesystemencoding(), "surrogateescape")

        # use float for accurate scaling
        dimensions = image.GetDimensions()
        result = numpy.frombuffer(gdcm_array, dtype=self.data_type).astype(float)
        if len(dimensions) == 3:
            # for cine (animations) there are 3 dims: x, y, number of frames
            result.shape = dimensions[2], dimensions[0], dimensions[1]
        else:
            result.shape = dimensions
        return result