我想向数组中的每个元素添加固定数量的序号。
例如:如果array = [32 67 9]
和固定数字k = 3;
output = [32 33 34 35 67 68 69 70 9 10 11 12];
在32之后,将32之后的3个数字相加,然后对数组中的其余元素执行相同的操作。
请注意,每次的数组长度都会不同。
答案 0 :(得分:2)
对于较旧的MATLAB版本(无显式扩展):
function out = q53920251(input, k)
out = reshape( ...
bsxfun(@plus, input(:).', reshape(0:k, [], 1)), ...
1, []);
在较新的版本中(允许使用较短的语法):
out = reshape( (0:k).' + array, 1, []);
上述 vectorized 解决方案的工作方式是将0:k
的列向量“添加”到作为输入数组的行向量。此操作将两个向量都扩展为正确的大小,然后对每个元素执行求和,有点像从中得到的结果:
[XX,YY] = ndgrid(0:k, arr);
%{
XX =
0 0 0
1 1 1
2 2 2
3 3 3
YY =
32 67 9
32 67 9
32 67 9
32 67 9
%}
tmp = XX + YY;
以上两种解决方案都在中间创建与tmp
相同的数组
tmp =
32 67 9
33 68 10
34 69 11
35 70 12
然后剩下的就是使用reshape
将元素重组为行向量。