fix matrix row removal.

This commit is contained in:
Vítor Santos Costa 2012-01-10 18:49:16 +00:00
parent a25c97c295
commit 5ce80cfe8a

View File

@ -2420,7 +2420,7 @@ matrix_column(void)
static int
matrix_sum_out(void)
{
int ndims, i, j, *dims, newdims, prdim;
int ndims, i, j, newdims, prdim;
int indx[MAX_DIMS], nindx[MAX_DIMS];
YAP_Term tpdim, tf;
int *mat = (int *)YAP_BlobOfTerm(YAP_ARG1), *nmat;
@ -2431,7 +2431,6 @@ matrix_sum_out(void)
/* we now have our target matrix, let us grab our conversion arguments */
tpdim = YAP_ARG2;
ndims = mat[MAT_NDIMS];
dims = mat+MAT_DIMS;
if (!YAP_IsIntTerm(tpdim)) {
return FALSE;
}
@ -2604,7 +2603,7 @@ static int
matrix_sum_out_logs(void)
{
int ndims, i, j, *dims, newdims, prdim;
int indx[MAX_DIMS], nindx[MAX_DIMS];
int nindx[MAX_DIMS];
YAP_Term tpdim, tf;
int *mat = (int *)YAP_BlobOfTerm(YAP_ARG1), *nmat;
if (!mat) {
@ -2668,18 +2667,17 @@ matrix_sum_out_logs(void)
nmat = (int *)YAP_BlobOfTerm(tf);
data = matrix_double_data(mat,ndims);
ndata = matrix_double_data(nmat,newdims);
while (j < prdim) {
j = ndims-1;
while (j > prdim) {
d = d*dims[j];
j++;
j--;
}
dd = d*dims[prdim];
for (i=0;i<nmat[MAT_SIZE];i++) {
int j = i % d + (i/dd)*d;
ndata[j] = exp(data[i]);
}
for (; i< mat[MAT_SIZE]; i++) {
int j = i % d + (i/dd)*d;
ndata[j] += exp(data[i]);
bzero(ndata, sizeof(double)*nmat[MAT_SIZE]);
for (i=0; i< mat[MAT_SIZE]; i++) {
YAP_Int k = i % d + (i/dd)*d;
ndata[k] += exp(data[i]);
}
for (i=0; i< nmat[MAT_SIZE]; i++) {
ndata[i] = log(ndata[i]);
@ -2697,6 +2695,7 @@ matrix_sum_out_logs_several(void)
int indx[MAX_DIMS], nindx[MAX_DIMS], conv[MAX_DIMS];
YAP_Term tf, tconv;
int *mat = (int *)YAP_BlobOfTerm(YAP_ARG1), *nmat;
if (!mat) {
/* Error */
return FALSE;