【问题标题】:Count number of unique combinations of values within a matrix计算矩阵中值的唯一组合的数量
【发布时间】:2015-04-10 17:35:31
【问题描述】:

我有一个叫 P 的 72x7 double 像这样:

1 45 2  61 7 1 11  
1 32 6  23 64 1 32  
2 55 32 25 90 3 24  
2 45 6  6 16 3 1  
2 45 4  17 20 3 1  
...
3 87 24 43 71 3 41  
5 64 8  66 75 98 1  

我感兴趣的两列是 1 和 6。我们将第 1 列中的值称为 m,将第 6 列中的值称为 n。 m 范围为 1-6,n 范围为 1 到 3 或 4。我想计算有多少行具有特定的 m 和 n。我们称这个值为 x。例如,在此示例中,如果 m=1 和 n=1,则 x 将为 2,因为有两行 m =1 AND n=1(第 1 行和第 2 行)。如果 m=2 AND n=3,x 将为 3(第 3、4 和 5 行)。 我打算做一个循环,像这样:

for m=1:6
   for n=1:a % a could be either 3 or 4
   x = (operation done here)
   end
end

我尝试了 numel 和 unique 函数,但都没有给我正确的答案。有人可以帮我吗?

谢谢,

亚历克斯

【问题讨论】:

    标签: matlab matrix indexing


    【解决方案1】:

    一种方法 -

    %// Get columns 1 and 6 from input matrix, P
    P16 = P(:,[1 6])
    
    %// Get unique row combinations and their IDs
    [unqrows,~,idx] = unique(P16,'rows')
    
    %// Get the counts for each combination
    counts = accumarray(idx(:),1) %// Or histc(idx,1:max(idx))
    
    %// Present the output
    out = [unqrows counts]
    

    因此,P 为 -

    P = [1 45 2  61 7 1 11
        1 32 6  23 64 1 32
        2 55 32 25 90 3 24
        2 45 6  6 16 3 1
        2 45 4  17 20 3 1 ]
    

    我们将输出为 -

    out =
         1     1     2
         2     3     3
    

    因此,在输出中,第一列代表m,第二列代表n,最后一列代表预期计数。

    【讨论】:

    • 我正要写一个解决方案....这几乎就是我会做的。呸呸呸。 +1。
    • @rayryeng 对不起,事实证明accumarray 也很有趣! :)
    • 这是我最喜欢在 MATLAB 中使用的函数之一!我最喜欢的一些答案使用它:)
    • 不错!像往常一样,有一个基于sparse 和find 的类似方法(而不是accumarray 和unique)
    【解决方案2】:

    假设 正整数 值,这将使用 sparse 来产生所需的结果。输出格式如Divakar's answer:

    [ii, jj, kk] = find(sparse(P(:,1), P(:,6), 1));
    result = [ii jj kk];
    

    【讨论】:

    • 不错!有趣的是,我们最近在 SO 上看到了很多这样的类型。
    • @Divakar 当然可以!我在回答这个问题时有一种似曾相识的感觉:-)
    猜你喜欢
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2019-06-18
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    相关资源
    最近更新 更多