主要内容

逗号分隔列表

逗号分隔列表是什么?

当您输入的一系列数字之间用逗号分隔,MATLAB®创建一个以逗号分隔并返回单独每个值。

1、2、3
ans = 1 = 2岁= 3

在使用大型和更复杂的数据结构,如MATLAB结构和细胞阵列,逗号分隔列表可以帮助简化代码。

生成一个以逗号分隔

您可以生成一个以逗号分隔的单元阵列或MATLAB结构。

从一个细胞生成列表的数组

当你从一个细胞中提取多个元素数组,结果是一个逗号分隔的列表。定义一个4-by-6单元阵列。

C =细胞(4、6);k =一24 C {k} = k * 2;结束C
C = 4×6单元阵列{[2]}{[10]}{[18]}{[26]}{[34]}{[42]}{[4]}{[12]}{[20]}{[28]}{[36]}{[44]}{[6]}{[14]}{[22]}{[30]}{[38]}{[46]}{[8]}{[16]}{[24]}{[32]}{[40]}{[48]}

提取第五列来生成一个逗号分隔的列表。

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

这是一样的显式类型列表。

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

生成的列表结构

当你提取的一个结构数组在它的一个维度,结果是一个逗号分隔的列表。

先将上述单元阵列使用转换成4-by-1 MATLAB结构六个领域:f1通过f6。阅读领域f5所有行,MATLAB返回一个逗号分隔的列表。

S = cell2struct (C, {“f1”,“f2”,‘f3’,“f4”,“f5”,“f6”2)};S.f5
= 34 = 36岁= 38岁= 40

这是一样的显式类型列表。

(1).f5,年代.f5 (2), (3) .f5,年代(4).f5

指定一个以逗号分隔的输出

你可以分配任何或所有连续的逗号分隔列表的元素变量用一个简单的赋值语句。定义单元阵列C和第一行分配给变量c1通过c6

C =细胞(4、6);k =一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}的变量c1,c2,c3而忽略C {1, 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} = [];c {2} = [];c {:}
ans = [] ans = []

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

[c{}): =交易(20[10],[12]14日);c {:}
= 10 20岁= 14 12

这个例子以同样的方式工作,但与一个以逗号分隔的向量结构字段。

(1)。field1 = [[]];(2)。field1 = [[]];s.field1
ans = [] ans = []

使用交易覆盖结构字段。

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

如何使用逗号分隔列表

共同使用逗号分隔列表:

这些部分提供与细胞阵列使用逗号分隔列表的例子。这些例子也适用于结构。

构建数组

您可以使用逗号分隔列表进入一系列的元素在构造一个矩阵或数组。当你指定一个元素的列表C {: 5}MATLAB插入四个人元素。

C =细胞(4、6);k =一24 C {k} = k * 2;结束一个= {“你好”C{: 5},魔术(4)}
= 1×6单元阵列{'你好'}{[34]}{[36]}{[38]}{[40]}{4×4双}

当你指定C细胞本身,MATLAB插入整个单元数组。

一个= {“你好”C魔法(4)}
= 1×3细胞数组{'你好'}{4×6细胞}{4×4双}

显示数组

使用列表来显示全部或部分的结构或单元阵列。

{:}
ans = '你好' ans = 4×6单元阵列{[2]}{[10]}{[18]}{[26]}{[34]}{[42]}{[4]}{[12]}{[20]}{[28]}{[36]}{[44]}{[6]}{[14]}{[22]}{[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}]
40 = 34 36 38 42 44 46 48

函数调用的参数

在编写一个函数调用的代码时,您输入的输入参数是一个列表每个参数由逗号分隔。如果你有这些参数存储在一个结构或单元阵列,然后您可以生成全部或部分结构或单元阵列的参数列表。这是特别有用,当传入的变量数量的参数。

这个例子将几个名称-值参数传递给情节函数。

X = -π:π/ 10:π;Y = tan (sin (X)) - sin (tan (X));C =细胞(2、3);C {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 = 1×3单元阵列{“工作/ mytest”} {‘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 =大小(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 (index1);其他的如果ndims (x) = = 2 y = x (index1 index2);结束结束

另一种方式处理这个问题没有逗号分隔列表遍历每个维度,将一维时间和每次移动数据。用逗号分隔的列表,你只有一次的数据。逗号分隔列表便于推广交换操作任意数量的维度。

故障排除操作使用逗号分隔的列表

一些常见的MATLAB操作和索引技术不直接以逗号分隔的列表。本节详细介绍几个错误时可以遇到使用逗号分隔列表和解释如何解决潜在的问题。

中间索引产生一个以逗号分隔

复合索引表达式括号或点可以产生以逗号分隔的列表。你必须指数的单个元素列表来访问它们。

例如,创建一个包含两个数组1×2细胞3×3矩阵的双打。

A ={魔法(3),兰德(3)}
= 1×2细胞数组{3×3双}{3×3双}

使用括号索引显示这两个元素。

{1,:}
ans = 8 1 6 3 5 7 4 9 2 ans = 0.7922 0.0357 0.6787 0.9595 0.8491 0.7577 0.6557 0.9340 0.7431

索引到一个这种方法会产生一个逗号分隔的列表,包括矩阵包含单元阵列。你不能使用括号索引来检索条目(1、2)在这两种矩阵在列表中。

{1,}(1、2)
中间括号“{}”与2索引产生一个以逗号分隔值,但它必须产生一个值时,其次是后续索引操作。

在检索条目(1、2)在这两个矩阵的单元阵列,指数分别进入细胞。

{1,1}(1、2){1,2}(1、2)
= 1岁= 0.0357

表达式产生一个逗号分隔的列表,而不是单个值

参数条件语句、循环和逻辑运算符开关声明不能被逗号分隔的列表。例如,您不能直接循环使用逗号分隔列表的内容循环。

创建一个单元阵列的前三个质数。

=细胞(1、3);{1}= 2;{2}= 3;{3}= 5;

{:}产生一个以逗号分隔的三个值。

{:}
ans = 2 = 3岁= 5

使用通过生成的逗号分隔列表循环{:}错误。

c = {:} disp (c)结束
大括号“{}”索引表达式产生的逗号分隔列表3值,只允许单个值。

遍历的内容一个,附上{:}在方括号连接成一个向量的值。

c = ({}): disp (c)结束
2 3 5

分配多个元素使用简单的任务

与数组,使用简单的分配给多个元素赋值一个以逗号分隔的错误。例如,定义一个2×3单元阵列。

B =细胞(2、3);

分配一个值为5的所有细胞阵列使用:作为一个索引B错误。

B {:} = 5
分配到6元素不支持使用一个简单的赋值语句。金宝app考虑使用逗号分隔列表赋值。

完成这项任务的一个方法是附上B {:}在方括号和使用交易函数。

[B{:}] =交易(5)
B = 2×3单元阵列{[5]}{[5]}{[5]}{[5]}{[5]}{[5]}

逗号分隔列表赋值一个未定义的变量

你不能指定一个以逗号分隔一个未定义的变量使用:作为一个索引。在这个例子分配到一个逗号分隔的列表,变量x被定义为一个以逗号分隔与明确的指标分配新值之前使用吗:作为一个索引。

x {1} = [];x {2} = [];({}):x =交易(20[10],[12]14日);x {:}
= 10 20岁= 14 12

执行相同的任务与一个变量没有初始化错误。

y({}): =交易(20[10],[12]14日);
逗号分隔列表赋值到一个不存在的变量时不支持任何索引是一个冒号(:)。金宝app使用明确的指标或执行任务之前定义的变量。

为了解决这个问题,初始化y以同样的方式x,或创建y使用的数量足够明确的指标,以适应值产生的交易函数。

[y{1:2}] =交易(20[10],[12]14日)
y = 1×2单元阵列{20 [10]}{12 [14]}

另请参阅

||