устранение конгруэнтных областей (обобщение: с нулями между ними) в MATLAB - PullRequest
0 голосов
/ 01 октября 2018

Мне нужно эффективно устранить (обнулить) последовательные «1» между «-1» в каждом столбце матрицы A, которые теперь могут быть разделены любыми нулями.Число последовательных «1» между «-1» составляет> N. Это нетривиальное обобщение моего предыдущего Вопрос .

Опять же, типичный размер (A) = [100000, 1000].

См. Пример:

  A =
       1    -1     0
       0     1     1
       0     1     1
       1     1     0
       0     0     1
       1    -1     0
      -1     1     1
      -1     0    -1
       1     1     1
       0     1    -1

Для N = 2 ожидаемый результат равен

Aclean =
       0    -1     0
       0     0     0
       0     0     0
       0     0     0
       0     0     0
       0    -1     0
      -1     0     0
      -1     0    -1
       1     0     1
       0     0    -1

Для N = 3 ожидаемый результат равен

Aclean =
      1    -1     0
      0     1     0
      0     1     0
      1     1     0
      0     0     0
      1    -1     0
     -1     1     0
     -1     0    -1
      1     1     1
      0     1    -1

1 Ответ

0 голосов
/ 01 октября 2018

Здесь, если я понимаю вопрос, это способ использования cumsum и accumarray:

N = 3;
sep = A==-1;
sep(1,:) = true;
idx = cumsum(sep(:));
sep(1,:) = A(1,:)==-1;
num = accumarray(idx, A(:)==1);
iff = num <= N;
Aclean  = reshape(sep(:)|iff(idx), size(A)) .* A;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...