Черепица вектор уникальным способом MATLAB

Рассматривать A = [ 200000 x 1] вектор. У меня есть другой вектор idx = [200000x1], Я хотел бы плитку A так что каждый ith элемент А плиточный idx(i) раз.

Например:

A   idx output 
2   2    2
3   1    2
4   3    3 
5   1    4
.   .    4
.   .    4
.   .    5 
.    .     .

Любые нецикличные идеи?

1 ответ

Решение

Похоже, вы ищете для декодирования длины пробега: это 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
Другие вопросы по тегам