我正在使用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]
答案 0 :(得分:2)
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) )