找到每一行的频率(3)

时间:2014-04-01 17:16:34

标签: matlab

根据我几天前的上一个问题,现在,我有几个mx3矩阵,其行包含(0,1,num),( - 1,0,num),(0,1,num),(0, - 1,num),(1,1,num),( - 1,1,num),(1,-1,num),( - 1,-1,num),其中num是一个整数,可以取任何值介于0到3之间。 我想创建一个包含8行和6列的新矩阵,其中前两列代表上述每个坐标,其余每列代表频率 每个num值的每个上述坐标的值。即,每行的第3列表示我们看到与该行对应的坐标的次数,并且num = 0。每行的第4列表示我们看到与该行对应的坐标的次数和num = 1。 每行的第5列表示我们看到与该行对应的坐标的次数和num = 2,每行的第6列表示我们看到与该行对应的坐标的次数和num = 3。 / p>

例如,如果A = [0 1 1      1 1 1      1 1 0      1 0 0      1 1 0      1 1 0      1 1 0      1 1 0      1 1 0      1 -1 0      1 1 0      1 1 3      1 1 2      1 1 3      1 1 3]

我想看到类似的东西:     -1 -1 0 0 0 0     -1 0 0 0 0 0     -1 1 0 0 0 0      0 -1 0 0 0 0      0 1 0 1 0 0      1 -1 1 0 0 0      1 0 1 0 0 0      1 1 7 1 1 3 有办法吗?感谢。

1 个答案:

答案 0 :(得分:0)

试试这个:

counts = zeros(9, 6); % Initialize output matrix

k = 1;
for ii = -1:1
    for jj = -1:1
        ijCoords = (A(:,1) == ii) & (A(:,2) == jj); % Find rows containing coordinate (ii,jj)
        ijCount = histc(A(ijCoords,3), 0:3); % Count how many 0,1,2,3 in these rows
        counts(k,:) = [ii, jj, ijCount(:)']; % Add the counts to the next row of the output matrix
        k = k + 1;
    end
end

counts(5, :) = []; % Remove coordinate (0,0) because you don't want it.