필터 지우기
필터 지우기

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

조회 수: 4 (최근 30일)
gire
gire 2013년 12월 16일
댓글: gire 2013년 12월 17일
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
James Tursa 2013년 12월 16일
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[0] is A, 2nd input prhs[1] is i
mwSignedIndex N, I, ONE;
double *pr, *DX, *DY;
double tmp;
ONE = 1;
N = mxGetN(prhs[0]); // assume input matrix is square
pr = mxGetPr(prhs[0]); // assume input matrix is double
I = mxGetScalar(prhs[1]);
DX = pr + (I-1); // Use 0-based indexing
DY = pr + (I-1)*N;
tmp = ddot(&N,DX,&N,DY,&ONE); // A(i,:)*A(:,i)

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Write C Functions Callable from MATLAB (MEX Files)에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by