首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将一个9x9矩阵分解成3x3矩阵?

如何将一个9x9矩阵分解成3x3矩阵?
EN

Stack Overflow用户
提问于 2020-08-18 14:58:57
回答 4查看 613关注 0票数 4

我正在尝试将一个9x9矩阵分解成9个3x3矩阵。我已经使用了命令reshape,但它返回的矩阵是将9x9矩阵的列转换为3x3矩阵时返回的矩阵,但这不是我需要的。这是9x9矩阵M

代码语言:javascript
运行
复制
0   0   0   0   0   0   0   7   6
0   2   0   9   0   0   0   0   0
0   3   8   0   5   4   1   0   0
9   0   0   5   0   0   0   3   0
0   0   0   0   1   8   0   6   7
4   0   0   0   0   0   2   0   0
0   1   0   8   0   0   0   5   0
0   0   0   0   0   7   0   0   0
6   0   2   0   3   0   8   9   4

我需要它的形式

代码语言:javascript
运行
复制
0 0 0    0 0 0    0 7 6
0 2 0    9 0 0    0 0 0
0 3 8    0 5 4    1 0 0       etc...

这段代码完全按照我需要的方式生成矩阵,但只保存最后一个:

代码语言:javascript
运行
复制
for i=[1 4 7]
    for j=[1 4 7]
        v(:,:)=M([i:i+2],[j:j+2])
    end
end
EN

Stack Overflow用户

发布于 2020-08-18 21:29:09

您可以创建一个平铺索引矩阵,然后使用它来获得3*3个数组

代码语言:javascript
运行
复制
idx = repelem( reshape(1:9,3,3), 3, 3 );
out = arrayfun( @(x) reshape(A(idx==x),3,3), 1:9, 'uni', 0 );

解释:

idx是一个平铺数组,如下所示:

代码语言:javascript
运行
复制
idx = 
     1     1     1     4     4     4     7     7     7
     1     1     1     4     4     4     7     7     7
     1     1     1     4     4     4     7     7     7
     2     2     2     5     5     5     8     8     8
     2     2     2     5     5     5     8     8     8
     2     2     2     5     5     5     8     8     8
     3     3     3     6     6     6     9     9     9
     3     3     3     6     6     6     9     9     9
     3     3     3     6     6     6     9     9     9

然后,arrayfun行遍历值1 .. 9,并提取idx与循环的索引值匹配的矩阵。我们必须在这里使用最终的reshape,因为逻辑索引将数组转换为1D。

输出是一个9x1单元数组,其中每个单元都是一个子矩阵。

票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63463362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档