# Get the data in rows and/or columns from a matrix in a MEX file

7 views (last 30 days)
gire on 16 Dec 2013
Commented: gire on 17 Dec 2013
Hello,
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:
is:
DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
* .. Scalar Arguments ..
INTEGER INCX,INCY,N
* ..
* .. 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;
double tmp;
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)
gire on 17 Dec 2013
Thanks for the code snippet.