罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

罗兰在MATLAB的艺术已经存档,不会被更新。

结构和逗号分隔列表

我看到越来越多的问题结构和矢量化的方式从他们中提取信息。虽然我已经覆盖的部分这一主题在早期的帖子,我会召集一个连贯的观点。

内容

结构简单数组

让我们使用一个简单的结构数组。通过简单的在这里,我的意思是,没有内嵌套结构(虽然我不相信有任何这样的术语定义在MATLAB)。我们可以使用函数结构体创建一个或我们可以用直接的符号。以下结构s1s2是等价的。

明确s1 =结构(“名字”,“罗兰”,“FavoriteNumber”17)s2.name =“罗兰”;s2。FavoriteNumber = 17
s1 =名字:“罗兰”FavoriteNumber: 17 s2 =名字:“罗兰”FavoriteNumber: 17

他们是一样的吗?

isequal (s1, s2)
ans = 1

现在让我们添加更多的人到“数据库”,他们最喜欢的数字。看到这个引用照明的结构输入。

s1(终端+ 1). name =“道格拉斯。”;s1(结束)。FavoriteNumber = 42;s2(结束+ 1)=结构(“名字”,“道格拉斯。”,“FavoriteNumber”,42岁);isequal (s1, s2)
ans = 1

当我们看其中一个,说s1吗?

s1
s1 = 1 x2结构体数组字段:名称FavoriteNumber

我们看到这是一个结构体尺寸1 x2和字段命名的名字FavoriteNumber。我们还可以看到,第一个元素s1 (1)和相关的值,因为它们不是太大。

s1 (1)
ans =名字:“罗兰”FavoriteNumber: 17

让我们尝试挖掘更深层次的现在,看看我们可以以不同的方式组织数据收集到其他一些MATLAB数组。从名字开始。

s1.name
ans =罗兰ans =道格拉斯

当我显示s1.name,我明白了ans =显示两次,一次在结构体数组中每个元素。就好像我执行这段代码:

s1 (1) . name, s1 (2) . name
ans =罗兰ans =道格拉斯

看看我写的最后一个表情?真的很2表达式在这种情况下,由一个常见的MATLAB语句分隔符,逗号,因此你看到这个词在文档中以逗号分隔。

转换数值变量结构字段

现在我想要的输出结构数组中特定字段和地点在一个MATLAB变量的值。我可以做这个

  • 一个循环,
  • 使用函数交易,
  • 利用符号新发布14。

我将显示所有3;我更喜欢最新的符号,部分原因是它的简洁和清晰的意图,但它也应该快一点。

ls1 =长度(s1);%的ls1 numFor = 0 (1);印第安纳州= 1:ls1 numFor(印第安纳州)= s1(印第安纳州).FavoriteNumber;结束%的交易[numDeal (1) numDeal(2)] =交易(s1.FavoriteNumber);% R14符号,罗兰的首选方法!numFavorite = [s1.FavoriteNumber];

检查正确的答案。

isequal (numFor numDeal numFavorite)
ans = 1

这个解决方案使用交易需要你知道你想要多少输出,可尴尬的以自动化的方式写。我可以将结果变成一个单元阵列,然后它转换为一个数字数组。这里,我创建一个以逗号分隔的输出值,然后将它们在里面[]建立细胞阵列的输出numDealC。然后我把这个单元格数组转换成数字使用cell2mat

[numDealC {1: ls1}] =交易(s1.FavoriteNumber);numDeal2 = cell2mat (numDealC);isequal (numFavorite numDeal2)
ans = 1

转换字符串单元阵列结构字段

现在我们的工作名称。因为它们是不同的长度,名字可能属于一个细胞的字符串数组。使用相同的想法有一个以逗号分隔的输出值,我把每个输出成一个细胞。也是一个逗号分隔的列表,右侧,释放14 (MATLAB 7),我可以分配这些值,不使用多个输出值交易或者其他的方式分布。记住,每一个细胞一个细胞数组本身就是一个MATLAB数组。

[名称{1:ls1}] = s1.name
名字=“罗兰”“道格拉斯”

我可以轻易地这样做而不是(感谢约翰的评论提醒)。

名称= {s1.name}
名字=“罗兰”“道格拉斯”

我现在有一个单元阵列的字符串名称和每个名称对应于相关的价值numFavorite数组中。我鼓励你去看看这里的引用,并张贴任何后续的想法。

引用

博客文章


使用MATLAB®7.2发表


评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。