在matlab中从矩阵中删除第一行的最佳方法

时间:2014-07-21 10:04:29

标签: matlab matrix row

我计划多次删除矩阵的第一行,并想知道这样做的最佳/最有效方法是什么。

我知道我可以做这样的事情

  M(1,:)=[]

M = M(2:end)

但我不确定哪种方式最好,或者有更好的方法。

2 个答案:

答案 0 :(得分:3)

嘿刚用tictoc测试了这两种方法 这是我使用的代码:

A=rand(100,100000);
tic
a=A(2:end,:);
t1=toc
tic
A(1,:)=[];
t2=toc

这就是结果:

t1 =

    0.0603    

t2 =

    0.0744

如果使用更长的列,则会更加明显:

A=rand(10000,100);
t1 =

    0.0083  

t2 =

    0.0124

因此,保存要保留的列似乎更快。

修改

有人评论说,tictoc在毫秒域中不“值得信赖”,因此建议使用循环多次运行代码。但结果不会改变

A=rand(100,100000);
size_A=size(A);
tic
for k=1:1:100
    A1=A;
    A1=A1(2:end,:);
end
t1=toc
tic
for k=1:1:100
    A1=A;
    A1(1,:)=[];
end
t2=toc 

这导致:

t1 =

    7.5237

t2 =

   15.2234

答案 1 :(得分:2)

一般来说,保持你想要的东西可能会更快。根据矩阵的尺寸,结果可能会有所不同。考虑以下测试用例,其中生成两个矩阵,A1和B1,尺寸为100x100000和100000x100。结果从轮廓查看器获得,但是tic toc测量证实了这些结果。

A1=rand(100,100000);

for ii=1:100
    A=A1;
    A=A(2:end,:);
end

for ii=1:100
    A=A1;
    A(1,:)=[];
end

B1=rand(100000,100);

for ii=1:100
    B=B1;
    B=B(2:end,:);
end

for ii=1:100
    B=B1;
    B(1,:)=[];
end

结果清楚地表明,第一种情况(在具有大量列的矩阵上保留您想要的内容)实际上非常慢。

虽然没有明确的这个或那个更快。您应该尝试适合您的情况!

Timing results