Set the number of rows
C Syntax
#include "matrix.h"
void mxSetM(mxArray *array_ptr, int m);
Arguments
m
The desired number of rows.
array_ptr
Pointer to an mxArray
.
Description
Call mxSetM
to set the number of rows in the specified mxArray
. The term "rows" means the first dimension of an mxArray
, regardless of the number of dimensions. Call mxSetN
to set the number of columns.
You typically use mxSetM
to change the shape of an existing mxArray
. Note that mxSetM
does not allocate or deallocate any space for the pr
, pi
, ir
, or jc
arrays. Consequently, if your calls to mxSetM
and mxSetN
increase the number of elements in the mxArray
, then you must enlarge the pr
, pi
, ir
, and/or jc
arrays. Call mxRealloc
to enlarge them. (See the mxSetN
reference page for an example of doing this.)
If your calls to mxSetM
and mxSetN
end up reducing the number of elements in the array, then you do can optionally reduce the sizes of the pr
, pi
, ir
, and/or jc
arrays in order to use heap space more efficiently.
Examples
Reshape a 3-by-2 mxArray
into a 6-by-1 mxArray
for more efficient use of memory without changing the data held by the mxArray
.
static double real_data[] = {5.2, 7.8, 4.3, 9.3, 8.2, 7.1};
int old_rows = 3, old_cols = 2;
int new_rows = 6, new_cols = 1;
double *pr;
mxArray *array_ptr;
/* Create a 3-by-2 array named "Apricot" */
array_ptr = mxCreateDoubleMatrix(old_rows, old_cols, mxREAL);
pr = mxGetPr(array_ptr);
memcpy((void *)pr,(const void *)real_data,
old_rows*old_cols*sizeof(double));
mxSetName(array_ptr, "Apricots");
...
/* Change the dimensions of "Apricots" from 3-by-2 to 6-by-1. */
mxSetM(array_ptr, new_rows);
mxSetN(array_ptr, new_cols);
...
The data in Apricot
starts out as
5.2 9.3
7.8 8.2
4.3 7.1
After reshaping, Apricot
's data becomes
5.2
7.8
4.3
9.3
8.2
7.1
For an additional example, see mxsetm.c
in the mx
subdirectory of the examples
directory.
See Also
mxGetM
, mxGetN
, mxSetN
[ Previous | Help Desk | Next ]