/*
mex -c mexutil.c
mex repmat.c mexutil.obj
to check for warnings:
gcc -Wall -I/cygdrive/c/MATLAB6p1/extern/include -c repmat.c
*/
/*#include "mexutil.h"
*/
#include "mex.h"
#include <string.h>
/* repeat a block of memory rep times */
void memrep(char *dest, size_t chunk, int rep)
{
#if 0
/* slow way */
int i;
char *p = dest;
for(i=1;i<rep;i++) {
p += chunk;
memcpy(p, dest, chunk);
}
#else
/* fast way */
if(rep == 1) return;
memcpy(dest + chunk, dest, chunk);
if(rep & 1) {
dest += chunk;
memcpy(dest + chunk, dest, chunk);
}
/* now repeat using a block twice as big */
memrep(dest, chunk<<1, rep>>1);
#endif
}
void repmat(char *dest, const char *src, int ndim, int *destdimsize,
int *dimsize, const int *dims, int *rep)
{
int d = ndim-1;
int i, chunk;
/* copy the first repetition into dest */
if(d == 0) {
chunk = dimsize[0];
memcpy(dest,src,chunk);
}
else {
/* recursively repeat each slice of src */
for(i=0;i<dims[d];i++) {
repmat(dest + i*destdimsize[d-1], src + i*dimsize[d-1],
ndim-1, destdimsize, dimsize, dims, rep);
}
chunk = destdimsize[d-1]*dims[d];
}
/* copy the result rep-1 times */
memrep(dest,chunk,rep[d]);
}
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
const mxArray *srcmat;
int ndim, *dimsize, eltsize;
const int *dims;
int ndimdest, *destdims, *destdimsize;
char *src, *dest;
int *rep;
int i,nrep;
int extra_rep = 1;
int empty;
if(nrhs < 2) mexErrMsgTxt("Usage: xrepmat(A, [N M ...])");
srcmat = prhs[0];
if(mxIsSparse(srcmat)) {
mexErrMsgTxt("Sorry, can't handle sparse matrices yet.");
}
if(mxIsCell(srcmat)) {
mexErrMsgTxt("Sorry, can't handle cell arrays yet.");
}
ndim = mxGetNumberOfDimensions(srcmat);
dims = mxGetDimensions(srcmat);
eltsize = mxGetElementSize(srcmat);
/* compute dimension sizes */
dimsize = mxCalloc(ndim, sizeof(int));
dimsize[0] = eltsize*dims[0];
for(i=1;i<ndim;i++) dimsize[i] = dimsize[i-1]*dims[i];
/* determine repetition vector */
ndimdest = ndim;
if(nrhs == 2) {
nrep = mxGetN(prhs[1]);
if(nrep > ndimdest) ndimdest = nrep;
rep = mxCalloc(ndimdest, sizeof(int));
for(i=0;i<nrep;i++) {
double repv = mxGetPr(prhs[1])[i];
rep[i] = (int)repv;
}
if(nrep == 1) {
/* special behavior */
nrep = 2;
rep[1] = rep[0];
}
}
else {
nrep = nrhs-1;
if(nrep > ndimdest) ndimdest = nrep;
rep = mxCalloc(ndimdest, sizeof(int));
for(i=0;i<nrep;i++) {
rep[i] = (int)*mxGetPr(prhs[i+1]);
}
}
for(i=nrep;i<ndimdest;i++) rep[i] = 1;
/* compute output size */
destdims = mxCalloc(ndimdest, sizeof(int));
for(i=0;i<ndim;i++) destdims[i] = dims[i]*rep[i];
for(;i<ndimdest;i++) {
destdims[i] = rep[i];
extra_rep *= rep[i];
}
destdimsize = mxCalloc(ndim, sizeof(int));
destdimsize[0] = eltsize*destdims[0];
for(i=1;i<ndim;i++) destdimsize[i] = destdimsize[i-1]*destdims[i];
/* for speed, array should be uninitialized */
plhs[0] = mxCreateNumericArray(ndimdest, destdims, mxGetClassID(srcmat),
mxIsComplex(srcmat)?mxCOMPLEX:mxREAL);
/* if any rep[i] == 0, output should be empty array.
Added by KPM 11/13/02.
*/
empty = 0;
for (i=0; i < nrep; i++) {
if (rep[i]==0)
empty = 1;
}
if (empty)
return;
src = (char*)mxGetData(srcmat);
dest = (char*)mxGetData(plhs[0]);
repmat(dest,src,ndim,destdimsize,dimsize,dims,rep);
if(ndimdest > ndim) memrep(dest,destdimsize[ndim-1],extra_rep);
if(mxIsComplex(srcmat)) {
src = (char*)mxGetPi(srcmat);
dest = (char*)mxGetPi(plhs[0]);
repmat(dest,src,ndim,destdimsize,dimsize,dims,rep);
if(ndimdest > ndim) memrep(dest,destdimsize[ndim-1],extra_rep);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
murphyk-matlabtools-archive-refs-heads-master.zip
共421个文件
m:404个
html:9个
txt:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 28 浏览量
2023-08-09
18:29:34
上传
评论
收藏 710KB ZIP 举报
温馨提示
murphyk-matlabtools-archive-refs-heads-master.zip
资源推荐
资源详情
资源评论
收起资源包目录
murphyk-matlabtools-archive-refs-heads-master.zip (421个子文件)
repmatC.c 4KB
util.html 42KB
stats.html 36KB
metaTools.html 29KB
graphics.html 21KB
graph.html 15KB
fileAuthorsMt.html 13KB
oop.html 7KB
authorsLOCmt.html 5KB
matlabToolsStats.html 4KB
drawGraph.m 45KB
htmlTable.m 19KB
placeFigures.m 15KB
deptoolbox.m 12KB
latextable.m 10KB
processArgs.m 10KB
applyhatch_pluscolor.m 10KB
MyEllipse.m 8KB
print_pdf.m 7KB
mpbdv.m 7KB
methodReport.m 6KB
serialize.m 5KB
methodInfo.m 5KB
hintonScale.m 5KB
hintonScaleMulti.m 5KB
seqlogoPmtk.m 5KB
quantizePMTK.m 5KB
paracyl.m 4KB
defaultDict.m 4KB
tagReport.m 4KB
plotgauss2d.m 4KB
process_options.m 4KB
timeit.m 4KB
dijkstraKay.m 4KB
fitCv.m 3KB
viewClassTree.m 3KB
depfunFast.m 3KB
subfigure.m 3KB
minSpanTreeKruskal.m 3KB
publishMethod.m 3KB
redgreenColormap.m 3KB
montagePMTK.m 3KB
addClass.m 3KB
plotiqr.m 3KB
suplabel.m 3KB
oneOfK.m 3KB
bestFirstElimOrder.m 3KB
whoCallsMe.m 3KB
plotDecisionBoundary.m 3KB
matlabToolsLocStatsReport.m 3KB
dependsOn.m 3KB
dfsPMTK.m 3KB
mutualInfoAllPairsMixed.m 2KB
plotxx.m 2KB
suptitle.m 2KB
filelist.m 2KB
dfsearchPMTK.m 2KB
shadowedFilesReport.m 2KB
unwrapCell.m 2KB
exportToGoogleCode.m 2KB
pairs.m 2KB
plotDistribution.m 2KB
ksdensity2d.m 2KB
fitCvPath.m 2KB
mutualInfoAllPairsDiscrete.m 2KB
tridiag.m 2KB
htmlTableSimple.m 2KB
compileRunAndSave.m 2KB
mk_all_dags.m 2KB
makehatch_plus.m 2KB
maxCardinalitySearch.m 2KB
matlabToolsAuthorReport.m 2KB
minWeightElimOrder.m 2KB
pscatter.m 2KB
argout.m 2KB
minSpanTreeDemo.m 2KB
biplotPmtk.m 2KB
texifyFormula.m 2KB
tagfinder.m 2KB
mfiles.m 2KB
plotCVcurve.m 2KB
compileAndRun.m 2KB
computeROC.m 2KB
minSpanTreePrimTieBreak.m 2KB
canonizeLabels.m 2KB
javaTable.m 2KB
perfectElimOrder.m 2KB
mcsCliques2Jtree.m 2KB
mkRndDag.m 2KB
hintonDiagram.m 2KB
matlabToolsAuthorLocReport.m 2KB
setupMnist.m 1KB
generateSynopsisTable.m 1KB
wwhich.m 1KB
dummyEncoding.m 1KB
histo.m 1KB
setSupport.m 1KB
xticklabelRot.m 1KB
splitString.m 1KB
exportsvn.m 1KB
共 421 条
- 1
- 2
- 3
- 4
- 5
资源评论
AbelZ_01
- 粉丝: 887
- 资源: 5441
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功