是否有更快的方法来连接矩阵,如下面的代码?这些代码行将被调用数千次,因此非常耗时。对于1658880个电话,我只需一个片就可以获得15秒! (我有大约2000片,所以通话总数将是1658880 * 2000倍!)
a=rand(1,100);
b=rand(1,100);
c=rand(1,100);
d=rand(1,100);
k=([b; b; b; d; ones(100); c; a; a; a]);
修改
Dev-iL的建议(repmat
):
k=zeros(9,100);
k(1:3,:)=repmat(b,3,1);
k(4,:)=d;
k(5,:)=ones(size(a));
k(6,:)=d;
k(7:9,:)=repmat(a,3,1);
没有repmat
k=zeros(9,100);
k(1,:)=b;
k(2,:)=b;
k(3,:)=b;
k(4,:)=d;
k(5,:)=ones(size(a));
k(6,:)=d;
k(7,:)=a;
k(8,:)=a;
k(9,:)=a;
使用repmat
,它比原始代码慢11秒。如果没有repmat
,我实际上会快15秒!
我感谢您提出更多建议和帮助!提前谢谢!
答案 0 :(得分:2)
由于在MATLAB中数据以column-major顺序存储,因此最好将a,b,c,d
生成为列向量并将它们连接为:
a=rand(100,1);
b=rand(100,1);
c=rand(100,1);
d=rand(100,1);
one = ones(100);
k= [b b b d one c a a a];
相反,您可以预先分配k
并将其填写为:
k = ones(100,108); %preallocation
%in the loop you can fill it:
k(:,1)=b;
k(:,2)=b;
k(:,3)=b;
k(:,4)=d;
k(:,105)=c;
k(:,106)=a;
k(:,107)=a;
k(:,108)=a;