gpt4 book ai didi

performance - Matlab:从数组高效生成子数组

转载 作者:行者123 更新时间:2023-12-04 02:55:49 25 4
gpt4 key购买 nike

我有一个 m x m 矩阵 M,我正在对它的不同部分进行采样以生成 k 子数组到 n x n x k 矩阵 N。我想知道的是:这是否可以在没有 for 循环的情况下有效地完成?

这是一个简单的例子:

M = [1:10]'*[1:10];                 %//' Large Matrix
indxs = [1 2;2 1;2 2];
N = zeros(4,4,3); %// Matrix to contain subarrays

for i=1:3,
N(:,:,i) = M(3-indxs(i,1):6-indxs(i,1),3-indxs(i,2):6-indxs(i,2));
end

在我的实际代码中,矩阵 MN 相当大并且此操作循环了数千次,因此这种低效率对运行造成了重大损失-时间。

最佳答案

可以使用 bsxfun 对其进行矢量化两次。不过,这并不意味着它一定更高效:

M = [1:10].'*[1:10]; %'// Large Matrix
indxs = [1 2;2 1;2 2];

r = size(M,1);
ind = bsxfun(@plus, (3:6).', ((3:6)-1)*r); %'// "3" and "6" as per your example
N = M(bsxfun(@minus, ind, reshape(indxs(:,1)+indxs(:,2)*r, 1,1,[])));

关于performance - Matlab:从数组高效生成子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30632396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com