Bug when using min() with sparse matrices?
Show older comments
Hi,
I translated one of my Matlab routines to C and now I've encountered a really strange behaviour which seems to be a bug. M is a sparse matrix and I printed M, M', min(M, M') and min(full(M), full(M')), but all of them as full matrices to see the problem better:
The last matrix is what I want and what I'm supposed to already get by using min(M, M'), but for some reason min(M, M') shows some really weird behaviour. Any gueses what causes this?
Edit: Here's the mex file:
#include "mex.h"
void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray *prhs[])
{
mxArray *tempArray, *outputDist[1], *inputDist[2], *outputSort[2];
double *tempVal, *pr, *sr, *sorted, *order;
mwSize n, nzmax;
mwIndex *irs, *jcs, i, j, k;
// distance function call
tempArray = mxCreateDoubleMatrix(1, 1, mxREAL);
tempVal = mxGetPr(tempArray);
inputDist[0] = prhs[0];
inputDist[1] = tempArray;
// read input matrix size
n = mxGetN(prhs[0]);
// read real part of input matrix
pr = mxGetPr(prhs[0]);
// read parameter for k
k = (mwIndex)*mxGetPr(prhs[1]);
// create output sparse matrix
nzmax = (mwSize)(n*k);
plhs[0] = mxCreateSparse(n, n, nzmax, mxREAL);
sr = mxGetPr(plhs[0]);
irs = mxGetIr(plhs[0]);
jcs = mxGetJc(plhs[0]);
// go through data points
for (i = 0; i < n; i++)
{
// calculate distance vector
tempVal[0] = (double)(i+1);
mexCallMATLAB(1, outputDist, 2, inputDist, "distEuclidean2");
// sort vector
mexCallMATLAB(2, outputSort, 1, &outputDist[0], "sort");
sorted = mxGetPr(outputSort[0]);
order = mxGetPr(outputSort[1]);
// assign values to sparse matrix
jcs[i] = i*k;
for (j = 0; j < k; j++)
{
irs[i*k+j] = (mwIndex)(order[j]-1);
sr[i*k+j] = sorted[j];
}
}
jcs[n] = n*k;
}
And here is the called distEuclidean2:
function [ d ] = distEuclidean2( M, ii )
d = sqrt(sum((repmat(M(:, ii), 1, size(M, 2)) - M) .^ 2, 1));
emd
6 Comments
Ingo
on 8 Jan 2012
Andrew Newell
on 8 Jan 2012
How did you translate it to C?
Ingo
on 8 Jan 2012
Andrew Newell
on 9 Jan 2012
That might help - also the commands you used to create the mex files.
Walter Roberson
on 9 Jan 2012
Suggest you edit the source in to your Question, as comments don't support formatting (or indentation even)
Ingo
on 9 Jan 2012
Accepted Answer
More Answers (0)
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!