罗兰对MATLAB的艺术

将想法转化为MATLAB

请注意

罗兰对MATLAB的艺术已退役,不会更新。

从结构体到数据集

当我上周五上班的时候,我看到一个电子邮件讨论,代表一个客户,试图找到一个好的方法来添加一个新的字段到结构体数组中。所以这篇文章将从这个问题开始,然后展示一种不同的方法来收集相同的信息,在a数据集数组中。

内容

初始结构和新数据

让我们创建一些信息来存储在a中结构体

名称= {“约翰。”“亨利。”};年龄= {26;18个};init = struct()“名字”、名称、“年龄”、年龄);

请注意年龄数据是一个单元格数组。除了…之外名字年龄,我有。高度数字而非单元格数组中的信息。

身高= [168;175);

如何将此信息添加到我的结构体?接下来是一系列的可能性,当然不是详尽的

First Pass - for循环

我们从a开始循环。的每个元素都添加了Height信息结构体数组,一次一个。

S1 = initS;index = 1:长度(S1) S1(索引)。Height = Height (index);结束

第二关- arrayfun

我可以用arrayfun去除循环。

S2 = initS;F = @(S,h) setfield(S,“高度”、h);S2 = arrayfun(F, S2, height);

第三通-交易

如果数据在单元格数组中,我可以轻松地将其分配到多个输出。这里我将高度数据存储在一个单元格中交易出来。

S3 = init;cH = num2cell(height);(S3。[Height] = deal({:});

第四步-逗号分隔列表

如果数据已经在单元格数组中,我可以跳过这一步交易把不同的细胞分配到不同的输出。

S4 = initS;cH = num2cell(height);(S4。[size] = {:};

相同的结果吗?

让我们快速检查每种技术是否得到相同的结果。

allsame = isequal(S1,S2,S3,S4)
Allsame = 1

数据是什么样的?

这里的数据很难看,例如,S1),因为每一个的内容结构体元素完全由用户支配。所以我可以一次查看一个数组元素。

S1 (1)
ans =姓名:'John'年龄:26身高:168

或者我可以一次查看单个字段中的所有数据。

(S1。年龄)
Ans = 26 18

但我看不见所有对数据一目了然。

完全不同的观点

现在是完全不同的东西。我之前在博客中写道关于数据集数组的统计工具箱。下面是另一个可能有用的例子。我将列视为单独的字段,将行视为单独的记录。每列包含一种数据类型的数据。这是数据。

名称= {“约翰。”“亨利。”} ages = [26;18];D1 = dataset({names,“名字”},{年龄,“年龄”})
names = 'John' 'Henri' d1 = Name Age 'John' 26 'Henri' 18

与使用a相比,这里需要注意两点结构体包含信息。首先,参数在两个解中以不同的顺序出现。金宝搏官方网站第二,数值数据不需要放在单元格数组中数据集,使数据管理更自然,在我看来。

让我用额外的数据做一个新的数据集,高度。

D2 = dataset({names,“名字”}, {[168;175]“高度”})
d2 =名字身高'John' 168 'Henri' 175

连接数据集数组

现在让我收集原始数据集d1有了新的信息d2。以下是实现这一目标的一些方法。首先,使用方括号([]),就像处理常规数组连接一样。

Dnew1 = [d1 d2]
dnew1 =姓名年龄身高'John' 26 168 'Henri' 18 175

另一种方法是在a中添加信息结构体就像回到原来的样子数据集

Dnew2 = d1;dnew2。身高= [168;175]
dnew2 =姓名年龄身高'John' 26 168 'Henri' 18 175

现在我们来改变一下数据集有了新的信息,但是交换了两个项的顺序。

D3 = dataset({{“亨利。”“约翰。”},“名字”}, {[175;168]“高度”})
d3 =名字高度'Henri' 175 'John' 168

如果我们试图收集会发生什么d1d3合而为一数据集

试一试Dnew3 = [d1 d3];ExcDataset disp (ExcDataset.message)结束
具有不同数据的重复变量名。

正如你所看到的,我不能通过连接将它们收集在一起。但是,我可以结合或加入这两个数据集正确。

Dnew3 = join(d1,d2,“名字”
dnew3 =姓名年龄身高'John' 26 168 'Henri' 18 175

注意,我可以很容易地一次看到所有的数据,与结构体数组中。

你如何安排你的数据?

你是否使用这两种策略来安排你的资料?结构体数据集数组)?或者你会做一些不同的事情?我很想听听你的经历在这里




与MATLAB®7.8发布

|
  • 打印
  • 发送电子邮件