我正在尝试使用'values'数组和'counter'数组将多个值插入到数组中.例如,如果:
a=[1,3,2,5]
b=[2,2,1,3]
Run Code Online (Sandbox Code Playgroud)
我想要一些功能的输出
c=somefunction(a,b)
Run Code Online (Sandbox Code Playgroud)
成为
c=[1,1,3,3,2,5,5,5]
Run Code Online (Sandbox Code Playgroud)
其中a(1)重复b(1)次,a(2)重复b(2)次等等...
MATLAB中是否有内置函数来执行此操作?如果可能的话,我想避免使用for循环.我尝试过'repmat()'和'kron()'的变体无济于事.
这基本上是Run-length encoding.
我的问题是与此类似一个,但我想根据在相同尺寸的第二阵列指定的计数复制每个元素.
这方面的一个例子,比如我有一个数组v = [3 1 9 4],我想用它rep = [2 3 1 5]来复制第一个元素2次,第二次复制,依此类推[3 3 1 1 1 9 4 4 4 4 4].
到目前为止,我正在使用一个简单的循环来完成工作.这就是我的开始:
vv = [];
for i=1:numel(v)
vv = [vv repmat(v(i),1,rep(i))];
end
Run Code Online (Sandbox Code Playgroud)
我设法通过预先分配空间来改进:
vv = zeros(1,sum(rep));
c = cumsum([1 rep]);
for i=1:numel(v)
vv(c(i):c(i)+rep(i)-1) = repmat(v(i),1,rep(i));
end
Run Code Online (Sandbox Code Playgroud)
但是我仍然觉得必须有一个更聪明的方法来做到这一点......谢谢
arrays matlab repeat run-length-encoding elementwise-operations