Get the data in rows and/or columns from a matrix in a MEX file
7 views (last 30 days)
Show older comments
gire on 16 Dec 2013
Commented: gire on 17 Dec 2013
I am writing a MEX routine in which I need to multiply a row and a vector from a matrix (among other things). In Matlab's language it would look like this:
tmp(i) = A(i,:) * A(:,i)
I want to use the ddot BLAS function. Is there a MEX function to get a complete row/column from a matrix?
James Tursa on 16 Dec 2013
The signature for ddot from this link:
DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
* .. Scalar Arguments ..
* .. Array Arguments ..
DOUBLE PRECISION DX(*),DY(*)
So you can just give the starting address (DX and DY) and increment (INCX and INCY) of each, no need to extract anything. E.g., a code snippet for calling to do the basic calculation could be this:
// Assume 1st input prhs is A, 2nd input prhs is i
mwSignedIndex N, I, ONE;
double *pr, *DX, *DY;
ONE = 1;
N = mxGetN(prhs); // assume input matrix is square
pr = mxGetPr(prhs); // assume input matrix is double
I = mxGetScalar(prhs);
DX = pr + (I-1); // Use 0-based indexing
DY = pr + (I-1)*N;
tmp = ddot(&N,DX,&N,DY,&ONE); // A(i,:)*A(:,i)
More Answers (0)
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!