MATLAB:通过重复单元格的长度重复单元格的索引来创建阵列



我正在使用MATLAB创建下面显示的数据单元格数组。我想创建一个新数组(输出(,其中重复" x"时间的索引。其中" x"等于该特定单元的长度。我可以为循环做到这一点,但是可以使用一个简单的功能完成吗?

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

您可以使用cellfunrepelem

进行操作
output = repelem(1:numel(data), cellfun(@numel, data));

但是请注意:

  • cellfun或多或少与循环相同;
  • repelem在R2015A版本中引入。

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) )

最新更新