code: def load_ndarray_file(nd_bytes):
      
      handle = NDListHandle()
      olen = mx_uint()
      nd_bytes = bytearray(nd_bytes)
      ptr = (ctypes.c_char * len(nd_bytes)).from_buffer(nd_bytes)
      _check_call(_LIB.MXNDListCreate(
          ptr, len(nd_bytes),
          ctypes.byref(handle), ctypes.byref(olen)))
      keys = []
      arrs = []
  
      for i in range(olen.value):
          key = ctypes.c_char_p()
          cptr = mx_float_p()
          pdata = ctypes.POINTER(mx_uint)()
          ndim = mx_uint()
          _check_call(_LIB.MXNDListGet(
              handle, mx_uint(i), ctypes.byref(key),
              ctypes.byref(cptr), ctypes.byref(pdata), ctypes.byref(ndim)))
          shape = tuple(pdata[:ndim.value])
          dbuffer = (mx_float * np.prod(shape)).from_address(ctypes.addressof(cptr.contents))
          ret = np.frombuffer(dbuffer, dtype=np.float32).reshape(shape)
          ret = np.array(ret, dtype=np.float32)
          keys.append(py_str(key.value))
          arrs.append(ret)
      _check_call(_LIB.MXNDListFree(handle))
  
      if len(keys) == 0 or len(keys[0]) == 0:
          return arrs
      else:
          return {keys[i] : arrs[i] for i in range(len(keys))}
docs: Load ndarray file and return as list of numpy array.
  
      Parameters
      ----------
      nd_bytes : str or bytes
          The internal ndarray bytes
  
      Returns
      -------
      out : dict of str to numpy array or list of numpy array
          The output list or dict, depending on whether the saved type is list or dict.