code: def __init_from_np2d(self, mat, params_str, ref_dataset):
          
          if len(mat.shape) != 2:
              raise ValueError('Input numpy.ndarray must be 2 dimensional')
  
          self.handle = ctypes.c_void_p()
          if mat.dtype == np.float32 or mat.dtype == np.float64:
              data = np.array(mat.reshape(mat.size), dtype=mat.dtype, copy=False)
          else:
              # change non-float data to float data, need to copy
              data = np.array(mat.reshape(mat.size), dtype=np.float32)
  
          ptr_data, type_ptr_data, _ = c_float_array(data)
          _safe_call(_LIB.LGBM_DatasetCreateFromMat(
              ptr_data,
              ctypes.c_int(type_ptr_data),
              ctypes.c_int(mat.shape[0]),
              ctypes.c_int(mat.shape[1]),
              ctypes.c_int(C_API_IS_ROW_MAJOR),
              c_str(params_str),
              ref_dataset,
              ctypes.byref(self.handle)))
          return self
docs: Initialize data from a 2-D numpy matrix.