fix matrix row removal.
This commit is contained in:
parent
a25c97c295
commit
5ce80cfe8a
@ -2420,7 +2420,7 @@ matrix_column(void)
|
|||||||
static int
|
static int
|
||||||
matrix_sum_out(void)
|
matrix_sum_out(void)
|
||||||
{
|
{
|
||||||
int ndims, i, j, *dims, newdims, prdim;
|
int ndims, i, j, newdims, prdim;
|
||||||
int indx[MAX_DIMS], nindx[MAX_DIMS];
|
int indx[MAX_DIMS], nindx[MAX_DIMS];
|
||||||
YAP_Term tpdim, tf;
|
YAP_Term tpdim, tf;
|
||||||
int *mat = (int *)YAP_BlobOfTerm(YAP_ARG1), *nmat;
|
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 */
|
/* we now have our target matrix, let us grab our conversion arguments */
|
||||||
tpdim = YAP_ARG2;
|
tpdim = YAP_ARG2;
|
||||||
ndims = mat[MAT_NDIMS];
|
ndims = mat[MAT_NDIMS];
|
||||||
dims = mat+MAT_DIMS;
|
|
||||||
if (!YAP_IsIntTerm(tpdim)) {
|
if (!YAP_IsIntTerm(tpdim)) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -2604,7 +2603,7 @@ static int
|
|||||||
matrix_sum_out_logs(void)
|
matrix_sum_out_logs(void)
|
||||||
{
|
{
|
||||||
int ndims, i, j, *dims, newdims, prdim;
|
int ndims, i, j, *dims, newdims, prdim;
|
||||||
int indx[MAX_DIMS], nindx[MAX_DIMS];
|
int nindx[MAX_DIMS];
|
||||||
YAP_Term tpdim, tf;
|
YAP_Term tpdim, tf;
|
||||||
int *mat = (int *)YAP_BlobOfTerm(YAP_ARG1), *nmat;
|
int *mat = (int *)YAP_BlobOfTerm(YAP_ARG1), *nmat;
|
||||||
if (!mat) {
|
if (!mat) {
|
||||||
@ -2668,18 +2667,17 @@ matrix_sum_out_logs(void)
|
|||||||
nmat = (int *)YAP_BlobOfTerm(tf);
|
nmat = (int *)YAP_BlobOfTerm(tf);
|
||||||
data = matrix_double_data(mat,ndims);
|
data = matrix_double_data(mat,ndims);
|
||||||
ndata = matrix_double_data(nmat,newdims);
|
ndata = matrix_double_data(nmat,newdims);
|
||||||
while (j < prdim) {
|
|
||||||
|
j = ndims-1;
|
||||||
|
while (j > prdim) {
|
||||||
d = d*dims[j];
|
d = d*dims[j];
|
||||||
j++;
|
j--;
|
||||||
}
|
}
|
||||||
dd = d*dims[prdim];
|
dd = d*dims[prdim];
|
||||||
for (i=0;i<nmat[MAT_SIZE];i++) {
|
bzero(ndata, sizeof(double)*nmat[MAT_SIZE]);
|
||||||
int j = i % d + (i/dd)*d;
|
for (i=0; i< mat[MAT_SIZE]; i++) {
|
||||||
ndata[j] = exp(data[i]);
|
YAP_Int k = i % d + (i/dd)*d;
|
||||||
}
|
ndata[k] += exp(data[i]);
|
||||||
for (; i< mat[MAT_SIZE]; i++) {
|
|
||||||
int j = i % d + (i/dd)*d;
|
|
||||||
ndata[j] += exp(data[i]);
|
|
||||||
}
|
}
|
||||||
for (i=0; i< nmat[MAT_SIZE]; i++) {
|
for (i=0; i< nmat[MAT_SIZE]; i++) {
|
||||||
ndata[i] = log(ndata[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];
|
int indx[MAX_DIMS], nindx[MAX_DIMS], conv[MAX_DIMS];
|
||||||
YAP_Term tf, tconv;
|
YAP_Term tf, tconv;
|
||||||
int *mat = (int *)YAP_BlobOfTerm(YAP_ARG1), *nmat;
|
int *mat = (int *)YAP_BlobOfTerm(YAP_ARG1), *nmat;
|
||||||
|
|
||||||
if (!mat) {
|
if (!mat) {
|
||||||
/* Error */
|
/* Error */
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
Reference in New Issue
Block a user