【发布时间】:2022-11-14 23:10:54
【问题描述】:
让我们考虑一下我的 Matlab 代码:
T = 250;
N = 10;
B = 5000;
% starting matrix
Matrix1 = rand(T,N*3,B);
% ending matrix
Matrix2 = nan(T,B*3,N);
% the loop is very slow
for n = 1:(N*3)
for b = 1:B
if n <= 10
Matrix2(:,b,n) = Matrix1(:,n,b);
elseif n <= 20
Matrix2(:,b + B,n - N) = Matrix1(:,n,b);
else
Matrix2(:,b + B + B,n - N - N) = Matrix1(:,n,b);
end
end
end
有没有更有效或更省时的方法来获得第二个矩阵?
【问题讨论】:
-
分配左侧的所有“Matrix1”变量都应该是“Matrix2”吗?
-
不是最终的好解决方案(实际上可能涉及
reshape,实际上可能只是reshape,但您的if/else 基本上是Matrix2(:, b*(i-1)*B+1, n*(i-1)*N+1),对于任意数量的拆分,在这种情况下为3。 -
分配到正确的矩阵可能会使此代码更快一些。但是您可以使用
reshape和permute一次性完成此操作,或者分别复制三个块。当然没有必要像这样循环n和b。 -
@GrapefruitIsAwesome 是的所有元素
标签: matlab loops matrix resize