Matlab小技巧—mat2cell对大矩阵分成若干块

Matlab小技巧—mat2cell对大矩阵分成若干块

    • 目的
    • mat2cell函数

目的

我写这篇文章的目的就是为了能够将大矩阵简单的分为若干块,例如500x500的矩阵,分成100x100个5x5的分块矩阵。文档上只写了通过dim1Dist = [5,5,5,...,5,5]对矩阵进行划分,但是我们不能直接写100个5,那样太麻烦了,我们这里有一个小技巧能够简单的进行划分。

mat2cell函数

我们先介绍一下mat2cell函数的用法:
mat2cell是将数组转化为在元胞中包含子数组的元胞数组,其中包括两种语法的用法

C = mat2cell(A,dim1Dist,...,dimNDist)
C = mat2cell(A,rowDist)
  • 第一种语法C = mat2cell(A,rowDist)

其中rowDist指的是行分布,描述输入数组行分布情况的向量,指定为数值向量。当您未指定如何沿其他任何维度划分 A 时,mat2cell 函数将返回一个 n×1 元胞数组 C,其中 n 等于 rowDist 中的元素数。
rowDist 的每个元素指定 C 中对应元胞所含子数组的行数。rowDist 的元素总和必须等于 A 的行数。

A = reshape(1:20,5,4)'
A = 4×5

     1     2     3     4     5
     6     7     8     9    10
    11    12    13    14    15
    16    17    18    19    20

划分 A 的行,以使元胞数组包含两个子数组。rowDist 的元素总和等于 A 的行数。划分后的结果为:

C{1} =
 
     1     2     3     4     5

 
 
C{2} =
 
     6     7     8     9    10
    11    12    13    14    15
    16    17    18    19    20
  • 第二种语法C = mat2cell(A,dim1Dist,...,dimNDist)

其中dim1Dist是将大矩阵分成块的尺寸,每一块的尺寸和需要和大矩阵的尺寸相同,例如:大矩阵是9x9的矩阵,分块的大小是3x3的,
Matlab小技巧—mat2cell对大矩阵分成若干块_第1张图片
那么

dim1Dist = [3 3 3]
C = mat2cell(A,dim1Dist,dim1Dist)

这样我们就将原先的矩阵分成了3x3的9个分块。
但是如果矩阵过大,是个500x500的矩阵,我们如何避免写一个dim1Dist = [5,5,5,...,5,5]而对矩阵进行分块处理。

  • 小技巧

这里我们有一个小技巧,我们的dim1Dist = ones(1, 100)*5, 其中,ones(1, 100)是生成一个1x100的全为1的矩阵,5为我们需要分成的块的尺寸,这样,C = mat2cell(A,dim1Dist,dim1Dist) 就能直接把500x500的矩阵分成100x100个5x5的块。

如果看到了这里,对你有所帮助,能否动动你的小手指,点个赞呢~

参考文献
https://ww2.mathworks.cn/help/matlab/ref/mat2cell.html?searchHighlight=mat2cell&s_tid=doc_srchtitle

你可能感兴趣的:(Matlab小技巧)