2015-12-17 3 views
1

У меня есть две матрицы с более чем 1000 строк и два столбца. Каждый раз, когда первый столбец равен «0», второй имеет значение, и каждый раз, когда первый столбец «1», второй - ноль. Пример:Совокупность вторых элементов столбца на основе элементов первого столбца - MATLAB

M = [0 23;0 35;1 0;1 0;0 2;1 0] 

M = 

    0 23 
    0 35 
    1  0 
    1  0 
    0  2 
    1  0 

Давайте думать о втором столбце в качестве независимого периодического цикла.

То, что я хочу, каждый раз, когда первый столбец равен 0 (до тех пор, пока он еще один), есть возможность проанализировать размер и сумму второго столбца. В конце я хочу знать, какой цикл больше по размеру и сумме. (в матрице примера, в качестве вывода, я знаю, что первый цикл больше с суммой 58).

ответ

4

Предполагая A в качестве входного массива на две колонки, вот один подход с accumarray -

%// Create ID array for using with accumarray 
id = cumsum([1;diff(A(:,1))~=0]); 

%// Get summations and counts for all IDs 
sums = accumarray(id,A(:,2)); 
counts = accumarray(id,1); 

%// Get offset in case the starting element in first column is not 0 
offset = (A(1,1)~=0)+1; 

%// Consider only even IDs corresponding to 0 elements cycle 
sums = sums(offset:2:end) 
counts = counts(offset:2:end) 

Пример запуска -

A = 
    1 34 
    1 45 
    0 23 
    0 35 
    1  0 
    1  0 
    0  2 
    0  8 
    0  6 
    1  9 
sums = 
    58 
    16 
counts = 
    2 
    3 
+0

@Diacula Что должно быть на выходе такого 'Ā'? – Divakar

+0

Спасибо, это очень помогло. Однако этот код работает только в том случае, если имеется два последовательных номера. В случае A = [0 23; 0 35; 0 2; 0 25; 1 0; 1 0] это не сработает. И если почти каждый «цикл» имеет разные размеры? Как я могу это сделать? – jonas345

+0

Вывод - это тот, который вы сделали, суммы и подсчеты. – jonas345

Смежные вопросы