MATLAB:通过按单元格的长度重复单元格的索引来创建数组

时间:2017-04-27 15:55:22

标签: arrays matlab indexing cell

我正在使用Matlab创建如下所示的数据单元格数组。我想创建一个新的数组(输出),其中重复单元格的索引" 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]

2 个答案:

答案 0 :(得分:2)

您可以使用cellfunrepelem

来完成此操作
Load

但请注意:

  • private void Form1_Load(object sender, EventArgs e) { button1.Enabled = false; } private void textBox1_TextChanged(object sender, EventArgs e) { button1.Enabled = textBox1.Text.Length > 0; } 或多或少与循环相同;
  • output = repelem(1:numel(data), cellfun(@numel, data)); 在R2015a版本中引入。

答案 1 :(得分:1)

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