在Matlab中,我有一个数字列表A
(向量),并且需要在每个条目之后添加一个n
个附加条目,其值比前一个高1
所以假设我有A=[5 11 17]
,n = 1,我需要让结果表达式包含[5 6 11 12 17 18]
。
我该怎么做?我见过repmat
和Tony's Trick,但他们只复制了一个向量,并没有向值添加任何东西。我可以在Matrix上应用任何表达式,例如:行索引是否添加到每个元素的值?
请原谅我,如果这真的是一个简单的任务,我是Matlab的新手,并没有把我的脑袋包围在那里但我觉得......很高兴任何指针!
答案 0 :(得分:3)
使用bsxfun
进行二维添加,然后将reshape
添加到一行:
B = reshape(bsxfun(@plus, A, (0:n).'), 1, []); %'// A assumed to be a row vector
示例:
>> A = [5 11 17];
>> n = 2;
>> B = reshape(bsxfun(@plus, A, (0:n).'), 1, [])
B =
5 6 7 11 12 13 17 18 19
答案 1 :(得分:1)
在此期间我自己找到了解决方案。不确定它是否有效,但我想我还是会发布它:
result = repmat(A, n-1, 1)+repmat([1:n-1]-1,length(A),1).'
result = result(:)