По моему предыдущему вопросу пару дней назад, теперь у меня есть несколько матриц 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 столбцами, где первые два столбца представляют каждую из вышеуказанных координат, а каждый из оставшихся столбцов указывает частоту каждой из вышеуказанных координат в каждой число значений. т.е. столбцы 3 каждой строки указывают, сколько раз мы видим координату, соответствующую этой строке с num = 0. столбцы 4 каждой строки указывают, сколько раз мы видим координату, соответствующую этой строке с num = 1. столбцы 5 каждой строки указывают, сколько раз мы видим координату, соответствующую этой строке с и num = 2, а столбцы 6 каждой строки указывают, сколько раз мы видим координату, соответствующую этой строке с и num = 3.

Например, если 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 Как это сделать? Спасибо.

0
user3452546 1 Апр 2014 в 21:16

1 ответ

Лучший ответ

Попробуй это:

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.
0
buzjwa 1 Апр 2014 в 22:12