У меня есть логический массив (нули и единицы) 1500x700
Я хочу найти «1» в каждом столбце, и когда в столбце более одного «1», я должен выбрать средний.
Возможно ли это сделать? Я знаю, как найти «1», но не знаю, как извлечь середину «1», если в одном столбце есть пара «1».
Вы можете
find
accumarray
x = [1 0 0 0 0; 0 0 1 0 0; 1 0 1 0 0; 1 0 0 1 0]; % example [ii, jj] = find(x); % step 1 result = accumarray(jj, ii, [size(x,2) 1], @(x) x(ceil(end/2)), NaN); % step 2
Обратите внимание, что:
@(x) x(ceil(end/2))
@median
NaN
Пример:
x = 1 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 result = 3 NaN 2 4 NaN
Функция find возвращает ваши индексы.
>> example=[1,0,0,1,0,1,1]; >> indices=find(example) indices = 1 4 6 7 >> indices(floor(numel(indices)/2)) ans = 4
Сделайте это для каждого столбца, и у вас есть решение.