主要内容

逗号分隔列表

什么是逗号分隔的列表?

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

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

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

生成逗号分隔的列表

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

从单元格数组生成列表

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

C=单元(4,6);k=1:24c{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{1,5},C{2,5},C{3,5},C{4,5}

从结构生成列表

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

首先,将上面使用的单元阵列转换为带有6个字段的4乘1 MATLAB结构:f1通过f6.阅读领域f5对于所有的行,MATLAB返回一个逗号分隔的列表:

S=单元2结构(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:24c{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=单元2结构(C{“f1”‘f2’“f3”“f4”“f5”“f6”2)};[sf1、sf2 sf3] = S.f5;sf3
sf3=38
你也可以用the交易为此目的发挥作用。

赋值给逗号分隔的列表

将多个值赋给逗号分隔的列表的最简单方法是使用交易函数。这个函数将它的所有输入参数分配给一个以逗号分隔的列表的元素。

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

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

使用交易重写列表中的每个元素。

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

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

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

使用交易覆盖结构字段。

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

如何使用逗号分隔的列表

逗号分隔列表的常见用途有

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

构造数组

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

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

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

当你指定C单元本身,MATLAB插入整个单元阵列:

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

显示数组

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

A{:}
ans=你好ans=[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=16233511108976414151

串联

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

一个= [C {: 6}]
A=3436384042444448

函数调用的参数

编写函数调用的代码时,输入的输入参数是一个列表,每个参数用逗号分隔。如果这些参数存储在结构或单元格数组中,则可以从结构或单元格数组生成全部或部分参数列表。这在传递变量数时特别有用争论不休。

的属性值参数情节功能:

X=-pi:pi/10:pi;Y=tan(sin(X))-sin(tan(X));C=cell(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{:}]=文件部分(“工作/ 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(index1);其他的如果Ndims (x) == 2 y = x(index1,index2);结束结束

在没有逗号分隔列表的情况下处理此问题的另一种方法是循环每个维度,一次转换一个维度,每次移动数据。使用逗号分隔的列表,只需移动数据一次。用逗号分隔的列表可以很容易地将交换操作推广到任意数量的维度。