主要内容

逗号分隔的列表

什么是逗号分隔的清单?

输入一串用逗号分隔的数字,你就会得到所谓的a以逗号分隔.MATLAB®软件单独返回每个值:

1,2,3
1个Ans = 2个Ans = 3

这样的列表本身并不是很有用。但是,当使用大型和更复杂的数据结构(如MATLAB结构和单元格数组)时,逗号分隔列表可以使您简化MATLAB代码。

生成逗号分隔的列表

本节介绍如何从单元格数组或MATLAB结构生成逗号分隔的列表。

从单元格数组生成列表

从单元格阵列中提取多个元素产生逗号分隔的列表。给定一个4×6个单元阵列,如此所示

C =细胞(4,6);k = 1:24 c {k} = k * 2;结束C
C = [2] [10] [18] [26] [34] [42] [42] [42] [第44] [第20] [图3] [第36] [第36] [第44] [第44] [第36] [第44] [第3] [第36] [第23] [第36] [第23][46] [46] [16] [24] [32] [40] [40] [40] [40] [40] [40] [40]

提取第五列生成以下逗号分隔列表:

C {: 5}
ans = 34 ans = 36 ans = 38 ans = 40

这与显式打字相同

C {1,5},C {2,5},C {3,5},C {4,5}

从结构生成列表

对于结构,提取存在于其中一个维度上的结构字段将生成一个逗号分隔的列表。

首先,将上面使用的单元格数组转换为具有6个字段的4 × 1 MATLAB结构:f1通过f6.阅读领域f5, MATLAB返回一个逗号分隔的列表:

s = cell2struct(c,{'f1''f2''f3''f4''f5'“f6”2)};S.f5
ans = 34 ans = 36 ans = 38 ans = 40

这与显式打字相同

s(1).f5,s(2).f5,s(3).f5,s(4).f5

从逗号分隔列表分配输出

您可以将逗号分隔列表的任何或所有连续元素分配给具有简单分配语句的变量。使用单元格数组C在前面的小节中,将第一行赋给变量c1通过c6

C =细胞(4,6);k = 1:24 c {k} = k * 2;结束[c1, c2, c3, c4、c5、c6) = C {1, 1:6};c5
c5 = 34
如果指定的输出变量少于表达式返回的输出数量,MATLAB将前N个输出分配给这N个变量,然后丢弃剩余的输出。在下一个例子中,MATLAB赋值c {1,1:3}的变量c1c2, 和c3,然后丢弃c {1,4:6}
[c1, c2, c3] = C {1, 1:6};
你可以用同样的方式分配结构输出:
s = cell2struct(c,{'f1''f2''f3''f4''f5'“f6”2)};[sf1、sf2 sf3] = S.f5;sf3
SF3 = 38.
你也可以使用交易为此目的的功能。

赋值给逗号分隔的列表

向逗号分隔的列表分配多个值的最简单方法是使用交易函数。该函数将其所有输入参数分配到逗号分隔列表的元素中。

这个示例使用交易覆盖逗号分隔列表中的每个元素。首先创建一个列表。

C {1} = [31 07];C {2} = [03 78];c {:}
ans = 31 7 ans = 3 78

交易覆盖列表中的每个元素。

[c{:}] = deal([10 20],[14 12]);c {:}
ans = 10 20 ans = 14 12

此示例与上面的一个相同,但在结构字段中使用逗号分隔的向量列表:

(1)。Field1 = [31 07];(2)。Field1 = [03 78];s.field1
ans = 31 7 ans = 3 78

交易覆盖结构字段。

[s.field1] =交易([10 20],[14 12]);s.field1
ans = 10 20 ans = 14 12

如何使用逗号分隔列表

逗号分隔列表的常见用法是

下面几节提供了在单元格数组中使用逗号分隔的列表的示例。这些例子中的每一个也适用于MATLAB结构。

构建阵列

您可以在构造矩阵或数组时使用逗号分隔列表输入一系列元素。注意插入时会发生什么列表而不是添加单元格本身。

当您指定一个元素列表C {:,5}, MATLAB插入四个独立的元素:

a = {'你好',c {:,5},魔术(4)}
A = 'Hello' [34] [38] [40] [4x4双]

当您指定CMatlab本身,MATLAB插入整个单元格阵列:

a = {'你好'C魔法(4)}
A = 'Hello' {4x6 cell} [4x4 double]

显示数组

使用列表显示结构或单元格数量的全部或部分:

一种{:}
ans = hello ans = [2] [10] [18] [26] [34] [42] [42] [42] [图36] [第44] [第44] [第26] [第44] [第44] [第26] [第26] [第44] [第26][30] [38] [46] [8] [16] [24] [32] [40] [48] ANS = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1

级联

将逗号分隔的列表放在方括号内从列表中提取指定的元素并连接它们:

一个= [C {: 6}]
A = 34 36 38 40 4 4 44 46 48

函数调用的参数

在编写函数调用的代码时,您将输入参数输入为列表,其中每个参数用逗号分隔。如果您有这些参数存储在结构或单元格数组中,则可以从结构或单元格数组生成所有或部分参数列表。当通过可变数量的参数时,这可能特别有用。

实例中传递了几个属性值参数情节功能:

x = -pi:pi / 10:pi;Y = Tan(SIN(x)) -  SIN(TAN(X));C =细胞(2,3);c {1,1} =“线宽”;C {2,} = 2;C {1,2} ='markeredgecolor';C {2,} ='k';c {1,3} =“MarkerFaceColor”;c {2,3} =‘g’;图绘制(X, Y,'--rs'C {:})

函数返回值

MATLAB函数也可以将多个值返回给呼叫者。这些值在列表中返回,每个值由逗号分隔。您可以使用具有结构或单元数组的逗号分隔列表而不是列出每个返回值。这对具有可变数量返回值的函数变得更加有用。

此示例将三个值返回给单元格数组:

C =细胞(1,3);[c {:}] = fileparts(“工作/ mytest / strArrays.mat”
C = 'work/mytests' 'strArrays' '.mat'

快速傅里叶变换实例

fftshift函数交换数组中每个维度的左右两部分。对于一个简单的向量,例如[0 2 4 6 8 10]输出将是[6 8 10 0 2 4].对于多维数组,fftshift沿每个维度执行此交换。

fftshift使用索引向量来执行交换。对于上面显示的向量,索引[1 2 3 4 5 6]重新排列形成一个新的索引[4 5 6 1 2 3].然后该功能使用此索引向量来重新定位元素。对于多维数组,fftshift必须为每个维度构造索引向量。逗号分隔的列表使这项任务更简单。

这里是fftshift功能:

功能y = fftshift(x) numDims = ndims(x);idx =细胞(1、numDims);k = 1:numDims m = size(x,k);p =装天花板(m / 2);Idx {k} = [p+1:m 1:p];结束y = x(idx {:});结束

该函数将索引向量存储在单元格数组中idx.构建此单元格数组相对简单。对于每个人N尺寸,确定该维度的大小并找到最近中点的整数索引。然后,构造绕过该维度的两半的向量。

通过使用单元格数组存储索引向量和用于索引操作的逗号分隔列表,fftshift只使用一个操作移动任意维度的数组:y = x (idx {}):.如果要使用显式索引,则需要编写一个如果语句,用于您希望函数处理的每个维度:

如果Ndims (x) == 1 y = x(index);其他的如果Ndims (x) == 2 y = x(index1,index2);结束结束

在没有逗号分隔的列表的情况下处理此操作的另一种方法是循环每个维度,每次一次转换一个维度和移动数据。使用逗号分隔的列表,您只需一次移动数据。逗号分隔的列表使得将交换操作概括为任意数量的维度。