输入一系列以逗号分隔的数字,可以得到一个逗号分隔列表.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}
对于结构,提取跨其一个维度存在的结构字段将生成一个逗号分隔的列表。
首先,将上面使用的单元阵列转换为具有六个字段的4x1 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=34
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}=[31 07];c{2}=[0378];c{:}
Ans = 31 7 Ans = 3 78
使用处理
覆盖列表中的每个元素。
[c{:}]=交易([1020],[1412]);c{:}
Ans = 10 20 Ans = 14 12
这个例子和上面的一样,但是在一个结构字段中有一个逗号分隔的向量列表:
s(1).field1=[31 07];s(2).field1=[0378];s、 字段1
Ans = 31 7 Ans = 3 78
使用处理
重写结构字段。
[s。Field1] = deal([10 20],[14 12]);s.field1
Ans = 10 20 Ans = 14 12
逗号分隔列表的常见用法有
以下各节提供了将逗号分隔列表与单元格数组一起使用的示例。这些示例中的每一个都适用于MATLAB结构。
在构造矩阵或数组时,可以使用逗号分隔的列表输入一系列元素。请注意当插入一个列表与添加单元格本身相反的元素。
当您使用指定元素列表时C {: 5}
,MATLAB插入四个单独的元素:
一个= {“你好”C{: 5},魔术(4)}
A=‘你好’[34][36][38][40][4x4双精度]
当您指定C
单元本身,MATLAB插入整个单元阵列:
一个= {“你好”,C,magic(4)}
A='Hello'{4x6单元}[4x4双精度]
使用列表显示结构或单元格数组的全部或部分:
{:}
ans = Hello ans = [2] [10] [18] [26] [42] [4] [12] [20] [28] [36] [44] [6] [14] [22] [30] [38] [46] [8] [16] [32] [40] [48] ans = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1
将一个逗号分隔的列表放在方括号中,从列表中提取指定的元素并将它们连接起来:
A=[C{,5:6}]
A = 34 36 38 40 42 44 46 48
在编写函数调用的代码时,您将输入参数作为列表输入,每个参数由逗号分隔。如果将这些参数存储在结构或单元格数组中,则可以从结构或单元格数组生成全部或部分参数列表。当传入可变数量的参数时,这可能特别有用。
此示例将多个属性值参数传递给情节
功能:
X = -π:π/ 10:π;Y = tan(sinx) - sin(X);C =细胞(2、3);C {1} =“线宽”; C{2,1}=2;C{1,2}=“MarkerEdgeColor”;C{2,2}=“k”;C {1,3} =“MarkerFaceColor”;C {2,3} =“g”; 图3(X,Y,“——rs”,C{:})
MATLAB函数还可以向调用者返回多个值。这些值以列表的形式返回,每个值用逗号分隔。不需要列出每个返回值,可以使用逗号分隔的列表和结构或单元格数组。对于那些返回值数目可变的函数,这将变得更加有用。
这个例子返回三个值给单元格数组:
C =细胞(1、3);[C {}): = fileparts (“工作/mytests/Strarray.mat”)
C='work/mytests''杂列'.mat'
这个FFT换档
函数交换数组中每个维度的左半部和右半部。对于简单向量,例如[0 2 4 6 8 10]
输出将是[6 8 10 0 2 4]
. 对于多维数组,FFT换档
沿着每个维度执行此交换。
FFT换档
使用索引向量执行交换。对于上面显示的向量,索引[1 2 3 4 5 6]
重新排列以形成新索引[4 5 6 1 2 3]
.然后,该函数使用这个索引向量重新定位元素。对于多维数组,FFT换档
必须为每个维度构造一个索引向量。逗号分隔的列表使这个任务简单得多。
这是FFT换档
功能:
函数y=fftshift(x)numDims=ndims(x);idx=单元(1,numDims);对于k=1:numDims m=size(x,k);p=ceil(m/2);idx{k}=[p+1:m1:p];终止y = x (idx {:});终止
该函数将索引向量存储在单元格数组中idx
.构建这个单元格数组相对简单。对于每一个N
维数,确定维数的大小并找到最接近中点的整数索引。然后,构造一个向量,交换这个维度的两半。
通过使用单元格数组存储索引向量,并使用逗号分隔的列表进行索引操作,FFT换档
只需一次操作即可移动任意维度的数组:y=x(idx{:})
. 如果要使用显式索引,则需要编写一个如果
要函数处理的每个维度的语句:
如果ndims(x)==1y=x(index1);其他的如果ndims(x)==2y=x(index1,index2);终止终止
另一种不使用逗号分隔列表的处理方法是遍历每个维度,每次转换一个维度,每次移动数据。使用逗号分隔的列表,只需移动一次数据。用逗号分隔的列表可以很容易地将交换操作归纳为任意数量的维。