用单元子阵列替换单元阵列元素

时间:2014-03-07 01:32:53

标签: arrays matlab octave dynamic-arrays cells

我必须在MATLAB / Octave中实现一个霍夫曼编码器(不幸的是),因此我使用单元阵列以获得最大的灵活性。我想在符号索引合并到早期索引时附加符号索引,这样我就可以跟踪在处理过程中合并的符号。

以下是一个例子:

Index  Prob.           Index  Prob.         Index  Prob.
1      0.5             1      0.5           1      0.5
2      0.2             3,4    0.3 ---> 0.4  2,3,4  0.4
3      0.2  ---> 0.3   2      0.1 ---/
4      0.1  ---/

如您所见,符号3和4被合并,然后合并索引,并且两个列表都按概率的降序进行处理。

所以我宣布了一个单元格数组:

  % cell index
  myinds = num2cell(1:numel(probs));

  D = 2; % binary

不幸的是,当我尝试合并两者时,我得到一个大小不匹配错误;

% 3. add subtrees
    myinds(end-(D-1)) = [myinds(end-(D-1)) mergedinds(2:end)];
    % remove merged leaves
    myinds((end-D):end) = []

任何一方的输出在概念上似乎都是我想要的,但是:

octave> [myinds(end-(D-1)) mergedinds(2:end)]
ans = 
{
  [1,1] =  3
  [1,2] =  4
}

octave> myinds(end-(D-1))
ans = 
{
  [1,1] =  6
}

我希望将上面的Index列存储为算法逐步完成图示的过程。我每次都可以生长一个矩阵,但这很慢且效率低下。据我了解,一个单元格数组会做我想要的,但我不能让它工作。

0 个答案:

没有答案