【问题标题】:MATLAB: Creating an array by repeating the index of a cell by the length of the cellMATLAB:通过按单元格的长度重复单元格的索引来创建数组
【发布时间】:2017-09-25 12:43:23
【问题描述】:

我正在使用 Matlab 创建如下所示的数据元胞数组。我想创建一个新数组(输出),其中单元格的 index 重复“x”次。其中“x”等于该特定单元格的长度。我可以用 for 循环来做到这一点,但可以用一个简单的函数来完成吗?

data = {[1,2,3], [4,5], [6], [7,8,9,10]}
% output = [1,1,1,2,2,3,4,4,4,4]

【问题讨论】:

  • 请展示您的循环解决方案。

标签: arrays matlab indexing cell


【解决方案1】:

您可以使用cellfunrepelem 来完成此操作

output = repelem(1:numel(data), cellfun(@numel, data));

但请注意:

  • cellfun 和循环差不多;
  • repelem 是在 R2015a 版本中引入的。

【讨论】:

【解决方案2】:

IMO @LuisMendo 的答案很优雅,我会接受,但如果你没有 repelem,另一种选择是使用 cellfun 然后 cell2mat

data = {[1,2,3], [4,5], [6], [7,8,9,10]}
% output = [1,1,1,2,2,3,4,4,4,4]
output = cell2mat(cellfun(@(d,i) i*ones(1,numel(d)),data,...
    num2cell(1:numel(data)),'UniformOutput',0) )

【讨论】:

  • 好主意。或者,也许更简单,cell2mat(arrayfun(@(k) repmat(k,1,numel(data{k})), 1:numel(data), 'UniformOutput', false))
  • repelem 正是我想要的,但不幸的是我在 R2012a 上。不过这个解决方案效果很好,谢谢!
  • @RyanWaite 在这种情况下考虑接受它。左上角有一个刻度线。欢迎来到 Stack Overflow!
猜你喜欢
  • 2011-01-18
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 2014-02-16
  • 2015-08-10
  • 2015-03-02
  • 2013-07-28
相关资源
最近更新 更多