2
/* cs_permute: permute a sparse matrix */
8
const mxArray *pargin [ ]
11
CS_INT ignore, *P, *Q, *Pinv, m, n ;
12
if (nargout > 1 || nargin != 3)
14
mexErrMsgTxt ("Usage: C = cs_permute(A,p,q)") ;
16
m = mxGetM (pargin [0]) ;
17
n = mxGetN (pargin [0]) ;
18
P = cs_dl_mex_get_int (m, pargin [1], &ignore, 1) ; /* get P */
19
Q = cs_dl_mex_get_int (n, pargin [2], &ignore, 1) ; /* get Q */
20
Pinv = cs_pinv (P, m) ; /* P = Pinv' */
21
if (mxIsComplex (pargin [0]))
24
cs_cl Amatrix, *A, *C, *D ;
25
A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ; /* get A */
26
C = cs_cl_permute (A, Pinv, Q, 1) ; /* C = A(p,q) */
28
D = cs_cl_transpose (C, 1) ; /* sort C via double transpose */
30
C = cs_cl_transpose (D, 1) ;
32
pargout [0] = cs_cl_mex_put_sparse (&C) ; /* return C */
34
mexErrMsgTxt ("complex matrices not supported") ;
39
cs_dl Amatrix, *A, *C, *D ;
40
A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ; /* get A */
41
C = cs_dl_permute (A, Pinv, Q, 1) ; /* C = A(p,q) */
42
D = cs_dl_transpose (C, 1) ; /* sort C via double transpose */
44
C = cs_dl_transpose (D, 1) ;
46
pargout [0] = cs_dl_mex_put_sparse (&C) ; /* return C */