有效快速地從Matrix中刪除給定行/列的任何提示?有效刪除MATLAB中的矩陣行/列
我最初認爲刪除給定矩陣的最後一列會比第一列更有效率,並且所有列操作比行操作(給出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代碼的性能?
謝謝!
是的,我希望用mxSetN得到的性能是它會簡單地忽略最後一列,並有效地刪除它;這似乎是作者所說的。不幸的是,它並沒有解決我的問題。最終,我認爲這樣做的最好方法可能只是一個'java.util.ArrayList'。 – genap
那麼,你可以採用mxSetN的方法,它會這樣做。它不會刪除它,直到mxArray實際得到清理,但MATLAB會將該數組視爲它有一個較少的列。什麼沒有解決這個問題?你說你不能讓它運行 - 問題是什麼? – CKT