【问题标题】:Indexing for a double in cell array matlab在单元格数组matlab中索引双精度
【发布时间】:2014-07-17 19:50:29
【问题描述】:

我有一个名为Event 的单元格数组,包含 179X59 个条目,每个元素都是一个 双倍

例如,Event{1,1} 是一个 14 位二进制数。就像0 1 0 0 0 0 0 0 0 0 1 0 0 0 一样,它分布在第 1 到第 14 列,所以每列都有一个位。

现在我的任务是索引元胞数组的每个元素并进入双精度数并分配一个特定的字母表,如果我看到1,则将 a 作为第一位。

所以如果我的字母是 A 到 N 的二进制 1 1 1 1 1 1 1 1 1 1 1 1 1 1,需要得到 ​​p>

A B C D E F G H I J K L M N 而不是那个二进制数。

所以在第二行给出的例子0 1 0 0 0 0 0 0 0 0 1 0 0 0我需要得到

0 B 0 0 0 0 0 0 0 0 K 0 0 0

最后应该返回 B,K 删除零。

我尝试将每个元素分配给一个矩阵并尝试使用strrep,但它没有帮助我。

【问题讨论】:

  • A 等等都是数字,对吧?

标签: matlab indexing double cell cell-array


【解决方案1】:

我想时间并不重要,所以你至少可以循环。粗略的草图:

alphabet = {A, B, C, D, E...}

j= 0;
for i=1:nBit
  if( Event{1,1}(i) == 1)
    EventAlphabet{1,1}{j} = alpabet{i};
    j = j + 1;
  end
end

您的问题有点不清楚,所以我的回答是一个粗略的草图,但可能对您有所帮助。

【讨论】:

    【解决方案2】:

    不删除零:

    alphabet = [11:24]; %// numbers. Replace values as needed
    resultzeros = bsxfun(@times, alphabet, vertcat(Event{:}));
    resultzeros = reshape(mat2cell(resultzeros, ones(1, size(resultzeros,1))), size(Event));
    

    如果您需要删除零:

    result = cellfun(@(x) nonzeros(x).', resultzeros, 'uni', 0);
    

    或直接:

    result = cellfun(@(x) alphabet(x~=0), Event, 'uni', 0);
    

    例子:

    >> Event = {[0 0 1 0], [1 1 1 1]; [1 1 0 0], [0 0 1 1]};
    >> alphabet = [4 5 6 7];
    

    给予

    result{1,1} =
    
         6
    
    result{2,1} =
    
         4     5
    
    result{1,2} =
    
         4     5     6     7
    
    result{2,2} =
    
         6     7
    

    【讨论】:

      【解决方案3】:

      代码

      cellfun(@(x) cellstr(char(nonzeros(x.*[65:65+numel(x)-1])))', Event,'uni',0)
      

      结果

      示例Event

      Event = {
          [0 1 0 1 0 0 1] [0 1 0 1 0];
          [0 1  1 1 0] [0 0 0 1 1 1 0 0 0 0 1 1 0 1]}
      

      输出 -

      >> Event{:}
      ans =
           0     1     0     1     0     0     1
      ans =
           0     1     1     1     0
      ans =
           0     1     0     1     0
      ans =
           0     0     0     1     1     1
      >> out{:}
      ans = 
          'B'    'D'    'G'
      ans = 
          'B'    'C'    'D'
      ans = 
          'B'    'D'
      ans = 
          'D'    'E'    'F'
      

      当然Event在其“上层”的列数和行数是用out维护的-

      >> Event
      Event = 
          [1x7 double]    [1x5  double]
          [1x5 double]    [1x14 double]
      >> out
      out = 
          {1x3 cell}    {1x2 cell}
          {1x3 cell}    {1x6 cell}
      

      【讨论】:

      • 感谢大家的回复,这些回复应该会有所帮助,非常感谢
      • @user3683939 如果有任何答案帮助您解决了问题,请考虑通过单击该答案左上角的绿色复选标记来接受它。
      • @user3683939 阅读更多关于接受答案herehere
      猜你喜欢
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 2018-08-23
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 2017-01-06
      相关资源
      最近更新 更多