有没有更快的方法来连接像下面这样的矩阵?这些代码将被调用数千次,因此非常耗时。对于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秒!我会非常感谢任何进一步的建议和帮助!提前致谢!
a,b,c,d
作为列向量,并将它们连接成[b b b d ones(100) c a a a]
。 此外,正如@Dev-iL建议的那样,预分配k
可能会很有用。 - rahnema1k = zeros(9,100);
然后k(1:3,:) = repmat(b, ...); k(4,:) = d;
等方式进行操作。不过,也许不需要使用 repmat,只需使用k(1,:) = b; k(2,:) = b; ...
更好。这需要进行基准测试。 - Dev-iLrepmat
,我快了15秒!我修改了问题,请看一下 :) - Gregor Isack