首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在matlab中将88x88的矩阵分解成4部分

如何在matlab中将88x88的矩阵分解成4部分
EN

Stack Overflow用户
提问于 2014-11-14 08:27:52
回答 3查看 204关注 0票数 0

到目前为止,我已经声明了一个大小为88x88的随机矩阵M应该是uint8 (所有值都应该在0到255之间)。将矩阵分解为4部分: p1、p2、p3、p4将所有部分连接成新的矩阵N。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-14 08:40:22

你的问题不太清楚,也许这有帮助,

代码语言:javascript
复制
M = uint8(randi([0 255],[88 88]));
p1 = M(1:end/2    ,1:end/2    );
p2 = M(1:end/2    ,end/2+1:end);
p3 = M(end/2+1:end,1:end/2    );
p4 = M(end/2+1:end,end/2+1:end);
N = [p1' p2';p3' p4'];
票数 0
EN

Stack Overflow用户

发布于 2014-11-14 08:46:57

方法1

如果您有图像处理工具箱,您可以使用blockproc对此使用非常直接的解决方案-

代码语言:javascript
复制
fun = @(block_struct) transpose(block_struct.data);
N = blockproc(M, [size(M,1)/2 size(M,2)/2], fun)

方法2

让我们假设您有一个大小为m x n的输入矩阵,并且希望将其划分为沿行的dim1p部分和沿列的dim2p部分,这样每个块的大小都是m/dim1p x n/dim2p,您希望将它们转换,最后将它们连接起来,形成一个2D数组。这可以被认为是你在问题中提议的一个general case

要想解决这样的问题,你可以用这个-

代码语言:javascript
复制
[m,n] = size(M); %// Get size

dim1p = 2; %// number of parts to be partitioned along dimension-1 (rows)
dim2p = 2; %// number of parts to be partitioned along dimension-2 (columns)

%// Split and transpose, resulting in a 3D array
A = reshape(permute(reshape(M, m, n/dim2p, []), [2 1 3]), n/dim2p, m/dim1p, []);

%// Join the 3D slices back into a 2D array for the desired output
nrows = n*dim1p/dim2p;
N = reshape(permute(reshape(permute(A,[1 3 2]),nrows,dim2p,[]),[1 3 2]),nrows,[])

示例运行(假设M为9 x 8大小,并将其划分为行和列的34部分,以便每个块的大小为3 x 2) -

代码语言:javascript
复制
M =
     5     6     2     6     4     2     1     3
     2     8     8     1     3     8     3     7
     5     1     6     8     4     1     6     8
     6     5     7     3     3     6     7     1
     4     3     9     3     2     2     5     3
     4     9     5     7     6     2     2     1
     7     6     2     5     9     3     5     6
     8     9     5     6     9     6     7     1
     1     1     3     3     4     9     1     3
dim1p =
     3
dim2p =
     4
N =
     5     2     5     2     8     6     4     3     4     1     3     6
     6     8     1     6     1     8     2     8     1     3     7     8
     6     4     4     7     9     5     3     2     6     7     5     2
     5     3     9     3     3     7     6     2     2     1     3     1
     7     8     1     2     5     3     9     9     4     5     7     1
     6     9     1     5     6     3     3     6     9     6     1     3
票数 1
EN

Stack Overflow用户

发布于 2014-11-14 14:53:25

另一种方法是使用mat2cell将矩阵分割成一个由2x2个单元格组成的网格,使用cellfun转换每个单元格的内容,然后使用cell2mat将它们全部拼接在一起。因此:

代码语言:javascript
复制
[rows, cols] = size(M);
C = mat2cell(M, [rows/2, rows/2], [cols/2, cols/2]);
D = cellfun(@transpose, C, 'uni', 0);
out = cell2mat(D);

次要注意事项:这只在行和列都是偶数时才能工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26925785

复制
相关文章

相似问题

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