Loren谈MATLAB的艺术

将想法转化为MATLAB

请注意

Loren谈MATLAB的艺术已存档,不会更新。

单元格数组及其内容

我写几篇博客文章到目前为止结构,而对他们的灵魂伴侣则不那么在意,细胞数组.就在上周,在年度MathWorks航空航天防御会议(MADC)上,有几个人向我寻求单元阵列和索引方面的帮助。再加上每周的问题MATLAB新闻组,是时候了。

内容

数组

你可能已经知道,MATLAB中的数组在任何二维中都是矩形的。例如,对于一个矩阵(二维)中的每一行,都有相同数量的元素——所有行都有相同数量的列。为了表示浮点数组中缺失的值,我们经常使用.每个MATLAB数组都是齐次的;也就是说,每个数组元素都是相同类型的实体,例如,双精度值。

细胞数组

在MATLAB 5.0中引入了单元阵列,以允许我们收集不同大小和类型的阵列。单元格数组本身在任何给定的两个维度中都必须是矩形的,因为每个元素都是一个单元格,数组中填充的都是相同类型的项。然而,每个单元格的内容可以是任何MATLAB数组,包括
  • 数字数组是人们最初学习的东西
  • 字符串
  • 结构
  • 细胞数组
清晰的

使用括号进行索引

使用圆括号进行索引对于所有MATLAB数组都是一样的。让我们先看看数值数组,然后是单元格数组。
魔术(3)
M = 8 1 6 3 5 7 4 9 2
让我们将单个元素放入另一个数组中。
s = M(1,2)
S = 1
接下来,让我们获取一行元素。
row3 = M(3,:)
Row3 = 4 9
现在抓取角元素。
角= M([1端],[1端])
角= 8 6 4 2
MATLAB工作区中有什么?
谁清楚在我们前进之前,先清理干净。
名称大小字节类M 3x3 72双数组角2x2 32双数组row3 1x3 24双数组s 1x1 8双数组总计为17个元素,使用136字节
接下来,让我们用细胞阵列做类似的实验。
C = {magic(3“弗雷德”...“AliceBettyCarolDianeEllen”“yp”42岁;...{1} 2 3}
C = [3x3 double] [17] 'fred' [1x25 char] 'yp' [42] {1x1 cell} [2] [3]
注意我们从印刷中获得的信息C.我们可以看到它是3x3,我们可以看到关于每个单元格中的值的信息,但不是必要的全部内容。第一个单元格包含一个3x3的双精度数组,第一行中的第二个元素包含标量值17,第一行中的第三个单元格包含一个字符串,这个字符串足够短,可以打印出来。让我们将单个元素放入另一个数组中。
sCell = C(1,2)
sCell = [17]
接下来,让我们获取一行元素。
row3Cell = C(3,:)
row3Cell = {1x1 cell} [2] [3]
现在抓取角元素。
cornscell = C([1端],[1端])
cornscell = [3x3 double] 'fred' {1x1 cell} [3]
现在我们的工作空间里有什么?
谁清楚sCellrow3CellcornersCell
名称大小字节类C 3x3 774 cell array cornscell 2x2 396 cell array row3Cell 1x3 264 cell array sCell 1x1 68 cell array总计84个元素,使用1502字节

关于圆括号索引的一个观察

当我们用括号索引数组时,(),提取数组的一部分,我们得到一个相同类型的数组。双精度阵列,我们得到了不同大小和形状的双精度数组作为输出。当我们对单元格数组做同样的事情时C,我们得到了输出的各种形状和大小的单元格数组。

单元格数组的内容

单元格数组在许多应用中都非常有用。我们在MATLAB中使用它们来收集不同长度的字符串。它们适用于收集不同大小的偶数数字数组,例如,从3到10阶的魔方。但是我们仍然需要从给定的单元格中获取信息,而不仅仅是创建更多的单元格数组().为此,我们使用花括号{}.我用了其中一组来创作C最初。现在,让我们从一些单元格中提取内容,并将输出分配给一个数组。让我们将单个元素放入另一个数组中。
m = C{1}
M = 8 1 6 3 5 7 4 9 2
接下来,让我们尝试获取一行元素。
试一试row3 = C{3,:}Lerr = lasterror;disp (lerr.message (24)):结束
赋值的右边是非法的。元素太多了。
为什么我做不到呢?我们看看第一行是什么。
: C (1)
Ans = [3x3 double] [17] 'fred'
现在让我们看看如果我们不把输出赋值给变量,我们会得到什么。
C {1,}
安= 8 1 6 3 5 7 4 9 2安= 17安=弗雷德
你可以看到我们赋值给三次,单元格数组行中的每个元素一次。就像我们写下了这样的表达:C {1}, {1,2}, C {1,3}这些数组的输出被依次分配给.MATLAB通常不能从这些单元格中获取内容并将它们放入单个数组中。我们可以提取第1行的内容,每次一个单元格,就像创建时一样.如果我们想一次提取更多的单元格,我们必须把每个单元格的内容放到它自己的单独数组中,像这样,
[c11 c12 c13] = C{1,:}
C11 = 8 1 6 3 5 7 4 9 2 c12 = 17 c13 = Fred
在使用逗号分隔的列表时,利用MATLAB Release 14中的新语法进行赋值。

单元格阵列索引摘要

  • 使用花括号{}用于设置或获取单元格数组的内容。
  • 使用括号()用于索引到单元格数组中,以收集另一个单元格数组中的单元格子集。
这里是我的记忆什么时候使用花括号:花括号内容谁有什么记忆或其他特殊的方法来帮助记住什么时候使用不同种类的索引?如果是的话,请在下面发表评论。

参考文献

发布与MATLAB®7.2
|