Ejemplo n.º 1
0
static int PyLWPR_S_init_D(PyLWPR *self,PyObject *value, void *closure) { 
   int err;
   LWPR_Model *m = &(self->model);
   if (!PyArray_Check(value)) {
      PyErr_SetString(PyExc_TypeError, "Attribute 'init_D' must be a numpy array.");
      return -1;
   }
   /* First, set init_M to the matrix, and do a Cholesky decomposition in place
   ** If this fails, keep and decompose the original init_D */
   err = set_matrix_from_array(m->nIn, m->nInStore, m->nIn, m->init_M, (PyArrayObject *)value);
   if (err) {
      lwpr_math_cholesky(m->nIn, m->nInStore, m->init_M, m->init_D);
      return -1;
   }                            
   if (!lwpr_math_cholesky(m->nIn, m->nInStore, m->init_M, NULL)) {
      /* Revert to original init_M */
      lwpr_math_cholesky(m->nIn, m->nInStore, m->init_M, m->init_D);   
      PyErr_SetString(PyExc_ValueError, "'init_D' must be a positive definite matrix.");   
      return -1;
   }
   /* Ok, everything was fine, init_M is already the factor, 
      copy the contents again to init_D */
   set_matrix_from_array(m->nIn, m->nInStore, m->nIn, m->init_D, (PyArrayObject *)value);
   return 0;
}
Ejemplo n.º 2
0
static void
gst_perspective_set_property (GObject * object, guint prop_id,
    const GValue * value, GParamSpec * pspec)
{
  GstPerspective *perspective;
  GstGeometricTransform *gt;
  gboolean matrix_ok;

  gt = GST_GEOMETRIC_TRANSFORM_CAST (object);
  perspective = GST_PERSPECTIVE_CAST (object);

  GST_OBJECT_LOCK (perspective);
  switch (prop_id) {
    case PROP_MATRIX:
      matrix_ok =
          set_matrix_from_array (perspective, g_value_get_boxed (value));
      if (matrix_ok) {
        gst_geometric_transform_set_need_remap (gt);
      }
      break;
    default:
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
      break;
  }
  GST_OBJECT_UNLOCK (perspective);
}
Ejemplo n.º 3
0
static int PyLWPR_S_init_alpha(PyLWPR *self,PyObject *value, void *closure) { 
   if (!PyArray_Check(value)) {
      PyErr_SetString(PyExc_TypeError, "Attribute 'init_alpha' must be a numpy array.");
      return -1;
   }
   return set_matrix_from_array(self->model.nIn, self->model.nInStore, self->model.nIn, 
                                 self->model.init_alpha, (PyArrayObject *)value);
}
Ejemplo n.º 4
0
static int PyLWPR_S_init_M(PyLWPR *self,PyObject *value, void *closure) { 
   int err;
   int i,j;
   LWPR_Model *m = &(self->model);   
   int nIn = m->nIn;
   int nInS = m->nInStore;
   
   if (!PyArray_Check(value)) {
      PyErr_SetString(PyExc_TypeError, "Attribute 'init_M' must be a numpy array.");
      return -1;
   }
   err = set_matrix_from_array(nIn, nInS, nIn, m->init_M, (PyArrayObject *)value);
   if (err) {
      /* There was a problem with the matrix, revert to original cholesky factor of init_D */
      lwpr_math_cholesky(nIn, nInS, m->init_M, m->init_D);
      return -1;
   } 
   for (j=0;j<nIn;j++) {
      for (i=j+1;i<nIn;i++) {
         if (m->init_M[i+j*nInS] != 0.0) {
            PyErr_SetString(PyExc_ValueError, "Attribute 'init_M' must be upper triangular.");
            return -1;
         }
      }
   }
   /* Everything seems to be ok, update init_D from init_M */
   for (j=0;j<nIn;j++) {   
      /* Calculate in lower triangle, fill upper */
      for (i=0;i<j;i++) {   
         m->init_D[i+j*nInS] = m->init_D[j+i*nInS];
      }
      for (i=j;i<nIn;i++) {
         m->init_D[i+j*nInS] = lwpr_math_dot_product(m->init_M + i*nInS, m->init_M + j*nInS,j+1);
      }
   }
   return 0;
}