【问题标题】:How do you make the two columns of double array within a cell into a struct (in matlab)如何将单元格内的两列双精度数组变成一个结构(在matlab中)
【发布时间】:2017-05-13 12:12:56
【问题描述】:

enter image description here我目前有一个 102 x 2 单元格,其中包含 102 列和 2 行 80 x 1 双精度。我想把这两列做成一个 1x1 结构。归根结底,我想要一个 102 x 1 的单元格,其中包含 102 个 1 x 1 结构,每个结构包含两个 80 x 1 双精度(有没有办法标记这些双精度)?

提前感谢您的帮助。

【问题讨论】:

  • 你能举个数据的例子吗?
  • 嗨@geoinformatic,我还不能在我的帖子中添加图片,所以这里有一个链接(i.stack.imgur.com/fCMja.jpg)。上图是我目前拥有的代码。左下角的框是我拥有的当前数据格式,右下角的框是期望的结果(但不是 4 个结构,我想要 102 个结构)。我希望这很清楚。

标签: matlab struct cell


【解决方案1】:

使用deal 将单元格内容转换为结构体,使用arrayfun 将这个大结构体拆分为单元格:

% random data 
X = rand(102,80,2);
% convert each row into a cell
Y = squeeze(num2cell(X,2));
Y = cellfun(@transpose,Y,'UniformOutput',0);
% generate struct
s = struct([]);
s(size(Y,1),1).data1 = [];
s(size(Y,1),1).data2 = [];
% assign struct values
[s(:).data1] = deal(Y{:,1});
[s(:).data2] = deal(Y{:,2});
% convert 102x1 struct into cell
C = arrayfun(@(i) s(i),1:numel(s),'UniformOutput',0).';

【讨论】:

  • 天啊!谢谢你。在格式方面,脚本就像一个宝石。唯一的问题是,我不知道这个脚本正在提取哪些数据。我的原始单元格有多个字段(data.choice、data.outcome、data.location 等),但我只想在每个结构中创建两个字段(data.choice 和 data.outcome)。如何在您的脚本中指定这一点?提前谢谢!
  • 我在这里有点困惑。你是说你原来的cellfields。原始变量是单元格还是结构体?
  • 对不起!不是故意混淆你的。我想我想通了。感谢您的帮助!
猜你喜欢
  • 2015-08-12
  • 2014-07-17
  • 2015-09-13
  • 2014-07-28
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 2016-09-15
  • 2020-05-24
相关资源
最近更新 更多