主要内容

resize

通过添加或删除元素调整数据大小

自 R2023b 起

说明

B = resize(A,m) 通过在 A 的尾部侧添加或删除元素,将 A 的大小调整为 m。例如,如果 m 是标量:

  • 如果 A 是向量,则 resize(A,m)A 填充或裁剪为长度 m

  • 如果 A 是矩阵、表或时间表,则 resize(A,m)A 填充或裁剪为具有 m 行。

  • 如果 A 是多维数组,则 resize(A,m)A 沿其大小不等于 1 的第一个维度填充或裁剪为由 m 指定的大小。

如果 m 是向量,则 m 中的每个元素表示 B 中对应维度的大小。

示例

B = resize(A,m,Name=Value) 使用一个或多个名称-值参量指定用于调整大小的其他参数。例如,resize(A,m,Pattern="circular")(其中 m 大于 A 在运算维度中的大小)通过循环重复输入数据来调整大小。

示例

示例

全部折叠

创建一个四元素列向量,并将该向量的大小调整为六个元素。默认情况下,resize 函数向数值向量的尾部侧添加零。

A = [1; 3; 5; 7];
B1 = resize(A,6)
B1 = 6×1

     1
     3
     5
     7
     0
     0

将该向量的大小调整为两个元素。默认情况下,resize 从尾部侧删除元素。

B2 = resize(A,2)
B2 = 2×1

     1
     3

创建三个具有不同长度的向量。

A1 = [2; 8; 3];
A2 = [9; 4; 6; 2; 7];
A3 = [9; 2; 6; 1; 9; 3];

确定第二个向量的长度。

m = length(A2)
m = 
5

调整第一个和第三个向量的大小以匹配第二个向量的长度。resizeA1 的末尾添加元素,并从 A3 的末尾删除一个元素。

B1 = resize(A1,m)
B1 = 5×1

     2
     8
     3
     0
     0

B3 = resize(A3,m)
B3 = 5×1

     9
     2
     6
     1
     9

您可以串联具有相同长度的向量。使用调整大小后的向量创建一个矩阵。

C = [B1 A2 B3]
C = 5×3

     2     9     9
     8     4     2
     3     6     6
     0     2     1
     0     7     9

也可以使用 paddatatrimdata 函数调整数据大小。使用 paddata 函数调整比目标长度短的向量的大小,使用 trimdata 函数调整比目标长度长的向量的大小。

D1 = paddata(A1,m)
D1 = 5×1

     2
     8
     3
     0
     0

D3 = trimdata(A3,m)
D3 = 5×1

     9
     2
     6
     1
     9

创建一个 3×3 矩阵。通过从每列删除一个元素,将列的长度调整为 2。通过反射每行中的数据,直到行包含九个元素,将行的长度调整为 9。Pattern 仅适用于 resize 为其添加元素的维度。

A = [1 3 5; 2 4 6; 7 8 10]
A = 3×3

     1     3     5
     2     4     6
     7     8    10

B = resize(A,[2 9],Pattern="reflect")
B = 2×9

     1     3     5     3     1     3     5     3     1
     2     4     6     4     2     4     6     4     2

创建一个 3×3 矩阵作为三维数组中的第一页。通过沿第三个维度调整维度大小,向数组添加第二个页。

A = [1 3 5; 2 4 6; 7 8 10]
A = 3×3

     1     3     5
     2     4     6
     7     8    10

B = resize(A,2,Dimension=3)
B = 
B(:,:,1) =

     1     3     5
     2     4     6
     7     8    10


B(:,:,2) =

     0     0     0
     0     0     0
     0     0     0

创建一个包含不同数据类型的变量的时间表。

num = [10; 20; 30];
cat = categorical(["A"; "B"; "A"]);
log = logical([1; 0; 1]);
str = ["Text 1"; "Text 2"; "Text 3"];
TT = timetable(num,cat,log,str,Timestep=hours(2))
TT=3×4 timetable
    Time    num    cat     log       str   
    ____    ___    ___    _____    ________

    0 hr    10      A     true     "Text 1"
    2 hr    20      B     false    "Text 2"
    4 hr    30      A     true     "Text 3"

将每个时间表变量调整为六个元素。resize 对每个变量的数据类型使用默认填充值。每种数据类型的默认填充值与 MATLAB® 在为表的最后一行之外赋值时创建的元素的值相同。

B1 = resize(TT,6)
B1=6×4 timetable
    Time     num        cat         log        str   
    _____    ___    ___________    _____    _________

    0 hr     10     A              true     "Text 1" 
    2 hr     20     B              false    "Text 2" 
    4 hr     30     A              true     "Text 3" 
    6 hr      0     <undefined>    false    <missing>
    8 hr      0     <undefined>    false    <missing>
    10 hr     0     <undefined>    false    <missing>

为要添加到每个时间表变量的元素指定自定义填充值。resize 会扩展行时间,因此无需为行时间指定填充值。

B2 = resize(TT,6,FillValue={mean(num),"C",1,""})
B2=6×4 timetable
    Time     num    cat     log       str   
    _____    ___    ___    _____    ________

    0 hr     10      A     true     "Text 1"
    2 hr     20      B     false    "Text 2"
    4 hr     30      A     true     "Text 3"
    6 hr     20      C     true     ""      
    8 hr     20      C     true     ""      
    10 hr    20      C     true     ""      

创建一个向量,其中前几个和后几个元素是不需要的。通过从前导和尾部侧删除元素来调整向量大小。由于要删除的元素数是奇数,resize 从向量的尾部侧删除的元素比从前导侧删除的元素多一个。

A = [0.1 1 2 3 3 2 1 0 NaN];
B = resize(A,6,Side="both")
B = 1×6

     1     2     3     3     2     1

输入参数

全部折叠

输入数据,指定为向量、矩阵、多维数组、表、时间表、元胞数组或结构体数组。

注意

如果 A 是元胞数组,则 resize 更改整个数组的大小。它不会更改数组中每个元胞的大小。使用 cellfun 函数将 resize 应用于元胞数组中的每个元胞。

沿运算维度调整后的数据大小,指定为非负整数标量或非负整数向量。每个元素表示调整后的数据在运算维度中的大小。

  • 如果 m 大于 A 在运算维度中的大小,则 resize 添加元素。

  • 如果 m 小于 A 在运算维度中的大小,则 resize 删除元素。

名称-值参数

全部折叠

Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

示例: B = resize(A,m,Pattern="circular")

沿其运算的维度,指定为 "auto"、正整数标量或正整数向量。每个元素代表输入数据的一个维度。

如果 Dimension"auto",则运算维度取决于输入参量:

  • 如果 m 是标量且 A 是数组,则运算维度是其大小不等于 1 的第一个维度。

  • 如果 m 是向量,则运算维度是 1:numel(m)

  • 如果 A 是表或时间表且 resize 正在添加元素,则运算维度是 1,并且运算对每个表或时间表变量分别进行。

  • 如果 A 是表或时间表且 resize 正在删除元素,则运算维度是 1[1 2],具体取决于 m 中的元素数。

添加元素的填充值,指定为标量、元胞数组或标量结构体。

每个类的默认填充值与 MATLAB® 在向量末尾之外赋值时创建的元素值相同。例如,数值输入数据的默认填充值为 0。

  • 如果 A 是数组,则标量 FillValue 指示在调整大小期间添加到 A 的所有元素的值。

  • 如果 A 是表或时间表,则元胞数组 FillValue 指示添加到每个表或时间表变量的元素的不同填充值。元胞数组中的元胞数量必须与表或时间表变量的数量匹配。如果 A 是具有行名称的表,则 resize 使用默认行名称(如 RowN)扩展行名称;它不使用 FillValue 调整行名称的大小。如果 A 是带行时间的时间表,则 resize 扩展行时间;它不使用 FillValue 调整行时间的大小。

  • 如果 A 是结构体数组,则标量结构体 FillValue 指示输入数据中每个字段的不同填充值。FillValue 中的字段数量和名称必须与输入数据中的字段数量和名称匹配。

如果指定 FillValue,则无法指定 Pattern

添加元素的模式,指定为表中的模式名称之一。该模式会重复进行,直到调整大小后的数据具有 m 大小。

  • 如果 A 是带行名称的表,则 resize 使用默认行名称(如 RowN)扩展行名称;它不使用 Pattern 添加到行名称。

  • 如果 A 是带行时间的时间表,则 resize 扩展行时间;它不使用 Pattern 添加到行时间。

如果指定 Pattern,则无法指定 FillValue

下表列出了模式名称及其描述,以及用示例说明每个模式如何调整输入数据 A = [1 2 3] 的大小。

模式名称描述 调整大小后的数据
"constant"使用由 A 的数据类型确定的默认值填充数据。

Sample of padding data using the "constant" pattern

"edge"通过将前导和尾随端点复制为常量填充值来填充数据。

Sample of padding data using the "edge" pattern

"circular"通过循环重复输入数据来填充数据。

Sample of padding data using the "circular" pattern

"flip"通过对称翻转输入数据来填充数据。端点会被复制。

Sample of padding data using the "clip" pattern

"reflect"通过反射输入数据来填充数据。端点不会被复制。

Sample of padding data using the "reflect" pattern

用于调整大小的输入数据的一侧,指定为以下值之一:

  • "trailing" - 用尾部元素填充 A,或从 A 的尾部裁剪元素。

  • "leading" - 用前导元素填充 A,或裁剪 A 的前导元素。

  • "both" - 在两侧调整 A 的大小。如果在运算维度中要添加或删除的元素数为偶数,则在 A 的尾部和前导侧均匀地填充或裁剪元素。如果在运算维度中要添加或删除的元素数为奇数,则在 A 的尾部侧填充或裁剪剩余元素。

提示

  • resize 返回调整大小后的数据,其大小与在 m 中指定的大小一致。如果需要与目标大小匹配的调整后数据,推荐使用 resize。如果只想向数据添加元素,请考虑使用 paddata 函数,该函数不会裁剪数据。如果只想从数据中删除元素,请考虑使用 trimdata 函数,该函数不会用额外数据填充。

  • resize 函数在输入数据中添加或删除元素。要重新排列现有元素,请使用 reshape 函数。

扩展功能

全部展开

版本历史记录

在 R2023b 中推出

另请参阅

| | | |