【问题标题】:Count unique consecutive values in Matlab在 Matlab 中计算唯一的连续值
【发布时间】:2016-05-25 15:50:59
【问题描述】:

我有一个数据列,其中包括字符串和整数值,以及空白单元格(见下文)。我想做的是计算唯一字符串和整数值的出现次数,但仅限于那些前面有不同/空白值的值。这在matlab中可行吗?非常感谢。

例子:

Red, Red, Red, [blank], 2, 2, 1, 1, 1, [blank], 1, 1, [blank], Red, Red, 1

期望的输出:

Red = 2,
2 = 1,
1 = 3

【问题讨论】:

  • 不应该是1 = 2,因为1s的实例跟在[blank]后面会出现两次?
  • 在这种情况下,我想计算所有前面有空格或不同数字/字符串的 1 实例(即每次 1 前面没有 1)。所以这里的结果计数将是 3 个实例。

标签: matlab


【解决方案1】:

首先找到您要计算的值的索引 - 即第一个值,以及与前一个值不同且非空白的值。然后,您需要计算结果子集中的唯一值。需要注意的是,您不能简单地使用unique,因为数据类型是混合的。解决它的一种方法是将数字转换为字符串(这显然假设您没有与数字一致的字符串)。然后,您可以使用uniqueaccumarray 的组合来查找唯一值及其频率:

data = {'Red', 'Red', 'Red', [], 2, 2, 1, 1, 1, [], 1, 1, [], 'Red', 'Red', 1};

idx = [true, ~cellfun(@isequal, data(2:end), data(1:end-1)) & ~cellfun(@isempty, data(2:end))];
data_match = data(idx);

data_str = cellfun(@num2str, data_match, 'uni', false);
[~, ia, ic] = unique(data_str, 'stable');
values = data_match(ia)'
counts = accumarray(ic, 1)

values = 
    'Red'
    [  2]
    [  1]


counts =
     2
     1
     3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    相关资源
    最近更新 更多