以独特的方式MATLAB平铺矢量

eni*_*mae 2 matlab tiling vectorization run-length-encoding

考虑A = [ 200000 x 1]矢量.我有另一个矢量idx = [200000x1].我想平铺A这样ithA的每个元素都是平铺idx(i)时间.

例如:

A   idx output 
2   2    2
3   1    2
4   3    3 
5   1    4
.   .    4
.   .    4
.   .    5 
.    .     .
Run Code Online (Sandbox Code Playgroud)

任何非循环的想法?

Sha*_*hai 6

看起来你正在寻找行程长度解码:这idx(ii)表示编码输出中应该存在的长度 A(ii).

这是在Matlab中做到这一点的好方法:

output = zeros(1, sum(idx)); % allocate output
output( cumsum( [1 idx(1:end-1)] ) ) = 1;
output = A( cumsum( output ) );

output =

 2     2     3     4     4     4     5
Run Code Online (Sandbox Code Playgroud)