【问题标题】:Tiling a vector in a unique way MATLAB以独特的方式平铺向量 MATLAB
【发布时间】:2014-07-01 05:27:51
【问题描述】:

考虑A = [ 200000 x 1] 向量。我有另一个向量idx = [200000x1]。我想平铺A,这样A 的每个ith 元素都平铺idx(i) 次。

例如:

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

任何非循环的想法?

【问题讨论】:

  • 必须是独特的方式吗? =P

标签: matlab vectorization tiling run-length-encoding


【解决方案1】:

您似乎正在寻找run length decoding:即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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多