【发布时间】:2016-06-15 02:11:26
【问题描述】:
关于从矩阵中高效快速地删除给定行/列的任何提示?
我最初认为删除给定矩阵的最后一列会比第一列更有效,并且所有列操作都会比行操作更有效(给定 MATLAB 的基于列的内存),我能够确认通过测试。然而,我得到的表现是相当不幸的。
someB = rand(4,50000);
someC = someB.';
tic
while size(someB,2) > 2
someB(:,size(someB,2)) = [];
end
toc
tic
while size(someC,1) > 2
someC(size(someC,1),:) = [];
end
toc
%Elapsed time is 13.869280 seconds.
%Elapsed time is 10.198270 seconds.
我做了一个快速搜索,在this MATLAB newsgroup discussion我发现希望通过外部 C MEX 函数确实有一种方法可以快速有效地删除矩阵的最后一列。代码附在下面。
#include "mex.h"
// You may need to uncomment the next line
//#define mwSize int
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
mwSize n;
if( n = mxGetN(prhs[0]) )
mxSetN(prhs[0], n - 1);
}
但是,我无法自己运行上述代码。如果您快速查看作者发现的结果,您会发现性能相当出色。我自己并不擅长 MEX;有谁知道如何修复上述代码以使其运行,或者在性能方面具有同等/接近同等水平的 MEX 代码/MATLAB 代码?
谢谢!
【问题讨论】: