通过向每个元素添加固定数量的序列号来扩展数组
Expanding an array by adding a fixed number of sequential numbers to every element
我想为数组中的每个元素添加固定数量的序号。
例如:如果array = [32 67 9]
和定数,k = 3;
output = [32 33 34 35 67 68 69 70 9 10 11 12];
此处将32后面的3个数字添加到32之后,然后对数组中的其余元素进行相同操作。
请注意,数组长度每次都会不同。
对于较旧的 MATLAB 版本(w/o 显式扩展):
function out = q53920251(input, k)
out = reshape( ...
bsxfun(@plus, input(:).', reshape(0:k, [], 1)), ...
1, []);
在较新的版本中(允许使用更短的语法):
out = reshape( (0:k).' + array, 1, []);
上述向量化解决方案的工作方式是"adding"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
.
将元素重新组织成一个行向量
我想为数组中的每个元素添加固定数量的序号。
例如:如果array = [32 67 9]
和定数,k = 3;
output = [32 33 34 35 67 68 69 70 9 10 11 12];
此处将32后面的3个数字添加到32之后,然后对数组中的其余元素进行相同操作。
请注意,数组长度每次都会不同。
对于较旧的 MATLAB 版本(w/o 显式扩展):
function out = q53920251(input, k)
out = reshape( ...
bsxfun(@plus, input(:).', reshape(0:k, [], 1)), ...
1, []);
在较新的版本中(允许使用更短的语法):
out = reshape( (0:k).' + array, 1, []);
上述向量化解决方案的工作方式是"adding"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
.