主要内容

逗号分隔列表

什么是逗号分隔列表?

输入一系列用逗号分隔的数字,就得到了所谓的a以逗号分隔.MATLAB®软件分别返回每个值:

1、2、3
Ans = 1 Ans = 2 Ans = 3

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

生成逗号分隔列表

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

从单元格数组生成列表

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

C =细胞(4、6);C{k} = k*2;结束C
C = [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}
Ans = 34 Ans = 36 Ans = 38 Ans = 40

这与显式输入是一样的

C C{1, 5},{2、5},{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

这与显式输入是一样的

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

从逗号分隔列表分配输出

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

C =细胞(4、6);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, 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] = deal([10 20],[14 12]);s.field1
Ans = 10 20 Ans = 14 12

如何使用逗号分隔列表

逗号分隔列表的常用用法如下

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

构建数组

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

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

一个= {“你好”C{: 5},魔术(4)}
A = 'Hello' [34] [36] [38] [40] [4x4 double]

当您指定Ccell本身,MATLAB插入整个cell数组:

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

显示数组

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

{:}
ans = [2] [10] [18] [26] [42] [42] [12] [20] [28] [36] [44] [6] [14] [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 42 44 46 48

函数调用的参数

在为函数调用编写代码时,您将输入参数作为一个列表输入,每个参数用逗号分隔。如果你有这些参数存储在一个结构或单元格数组中,那么你可以从结构或单元格数组生成参数列表的全部或部分。这在传入变量数量的参数时特别有用。

属性的几个属性值参数情节功能:

X = -π:π/ 10:π;Y = tan(sinx) - 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 = '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);结束结束

另一种不使用逗号分隔列表的处理方法是遍历每个维度,每次转换一个维度并移动数据。使用逗号分隔的列表,只需移动数据一次。逗号分隔的列表可以很容易地将交换操作推广到任意数量的维度。