gpt4 book ai didi

arrays - 沿对角线子集对称矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 19:44:21 25 4
gpt4 key购买 nike

我有一个 8x8 矩阵,例如A=rand(8,8)。我需要做的是沿对角线对所有 2x2 矩阵进行子集化。这意味着我需要保存矩阵 A(1:2,1:2), A(3:4,3:4), A(5 :6,5:6), A(7:8,7:8)。为了更好地解释我自己,我使用的当前版本如下:

 AA = rand(8,8);
BB = zeros(8,2);
for i = 1:4
BB(2*i-1:2*i,:) = AA(2*i-1:2*i,2*i-1:2*i);
end

这适用于小型 AA 矩阵和小型 AA 子矩阵,但是随着尺寸的显着增长(它甚至可以达到 50,000x50,000)使用 for 循环像上面的那样不可行。有没有办法在没有循环的情况下实现上述目标?我想到了其他可能利用上三角矩阵和下三角矩阵的方法,但即使这些方法在某些时候似乎也需要循环。感谢您的帮助!!

最佳答案

这里有一个方法:

AA = rand(8,8); % example matrix. Assumed square
n = 2; % submatrix size. Assumed to divide the size of A
mask = repelem(logical(eye(size(AA,1)/n)), n, n);
BB = reshape(permute(reshape(AA(mask), n, n, []), [1 3 2]), [], n);

这会生成一个 logical mask选择所需的元素,然后使用 reshape 根据需要重新排列它们和 permute .

关于arrays - 沿对角线子集对称矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56194386/

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