让我们考虑一下我的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
有没有更高效或更省时的方法来到达第二个矩阵?
1条答案
按热度按时间mdfafbf11#
编辑
循环可以写为
reshape
和permute
运算的组合:主要答案对于将循环转换为矢量化形式很有用:
以下是一个矢量化的解决方案:
指数
n
应该根据这三个条件分为三个部分。此外,还需要置换Matrix1
,使其维度顺序与Matrix2
的顺序匹配,以确保矢量化赋值正确工作。但是,因为Matrix1
的维度顺序改变了,所以在提取Matrix11
的子集时需要重新排序索引位置。同样,
permute
可以应用于每个赋值