首页 > 解决方案 > Bin交互频率

问题描述

我有 10 个箱子,每个箱子都包含特定数量的观察结果,例如:

a = [0,0,1,0,0,2,0,0,0,2]

我想随后根据观察的数量计算任何给定的(非零)bin 对同时出现的次数。

给定上面的例子bin#3 = 1bin#6 = 2bin#10 = 2

这意味着 bin 3 和 6 共出现一次, bin 3 和 10 共出现一次, bin 6 和 10 共出现两次(取该对的最小值)。

我想要的输出是一个完整的矩阵,列出了所有可能的 bin 组合(第 1-2 列)和观察到的总数(第 3 列):

1   2   0
1   3   0
1   4   0
1   5   0
1   6   0
1   7   0
1   8   0
1   9   0
1   10  0
2   3   0
2   4   0
2   5   0
2   6   0
2   7   0
2   8   0
2   9   0
2   10  0
3   4   0
3   5   0
3   6   1
3   7   0
3   8   0
3   9   0
3   10  1
4   5   0
4   6   0
4   7   0
4   8   0
4   9   0
4   10  0
5   6   0
5   7   0
5   8   0
5   9   0
5   10  0
6   7   0
6   8   0
6   9   0
6   10  2
7   8   0
7   9   0
7   10  0
8   9   0
8   10  0
9   10  0

有没有一种简短和/或快速的方法来做到这一点?

标签: matlab

解决方案


尝试这个。

bin_output = [....];
bin_matrix = [0,0,1,0,0,2,0,0,0,2];
bin_nonzero = find(bin_matrix);
for j = 1:length(bin_nonzero);
    if isequal(j,length(bin_nonzero))
        break;
    end
    for k = (j+1):(length(bin_nonzero))
        for m = 1:length(bin_output)
            if isequal(bin_output(m,1),j) && isequal(bin_output(m,2),k)
                bin_output(m,3) = bin_output(m,3) + min([bin_matrix(1,bin_nonzero(1,j)),bin_matrix(1,bin_nonzero(1,k))]);
            end
        end
    end
end

推荐阅读