Использование 2D-массива для отслеживания значения по строкам и столбцам до первого вхождения значения? - PullRequest
1 голос
/ 14 июля 2020

Я искал что-то подобное, но ничего не нашел. Также боролся с формулировкой своего вопроса, так что терпите меня здесь. Я работаю с данными, предоставленными в файле Excel, и у меня есть Excel / VBA и python, доступные для использования. Я все еще изучаю и то, и другое, и мне просто нужен пу sh в правильном направлении, чтобы определить, какой метод использовать, чтобы я мог работать над ним и учиться.

Допустим, у меня есть 5 процессов на производстве объект, каждый процесс представлен столбцом. Иногда последующий процесс (столбец 5) получает резервную копию и замедляет последующие процессы (столбец 4, затем 3 и т. Д. c). У меня есть 2D-массив, который указывает на выполнение (0) или резервное копирование (1). Каждый столбец - это отдельный процесс, а каждая строка - временной интервал. Массив будет каждый раз одинакового размера (более 10000 строк, 5 столбцов), но значения меняются. Пример:

MyArray = [0 0 0 0 0
           0 1 0 0 0
           1 1 0 0 1
           1 0 0 0 1
           0 0 0 1 1
           0 0 1 1 1
           0 0 1 1 0
           0 1 1 0 0
           0 1 0 0 0
           0 0 0 0 0]

По сути, когда есть значение 1, я хочу отследить его до самого верхнего правого соседнего 1. Таким образом, для столбца 1 строки 2 и 3 будут отслежены до столбца 2, строки 2. Для столбца 2 строки 8 и 9 будут прослежены до столбца 5, строки 3. В настоящее время у меня есть только оператор if, который смотрит вправо в той же строке, и это лучше, чем ничего, но не отражает каскадный эффект. вы получаете, когда что-то выполняет резервное копирование нескольких восходящих процессов.

Я мог бы найти способ сделать это, зациклив поиск для поиска в столбце, пока не найдет ноль, тогда, если следующее значение столбца будет 1 , поиск, пока не найдет ноль, повторить. Но это кажется действительно неэффективным, и я чувствую, что должен быть лучший способ сделать это. Любые мысли или комментарии были бы очень полезны. Спасибо.

1 Ответ

0 голосов
/ 14 июля 2020

Один совет - начать с нижней строки (назовем эту строку r = 0) и первого столбца c = 1 и искать вправо, пока не дойдете до столбца c = 5. Если единицы не найдены, повторите поиск строки, идущей от второго до самого нижнего, и продолжайте, пока не выполните поиск в верхней строке. задайте вопрос: «У этого элемента все нули вверху (r + 1, c), справа (r, c + 1) или вверху и вправо (r + 1, c + 1). Теперь, Я не уверен, что вы делаете в случае «t ie», т. Е. Когда есть 1 выше, в (r + 1, c), и еще 1 справа, в (r, c + 1), но 0 в (r + 1, c + 1), но вы можете обратиться к этому соревнованию с помощью простого оператора if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...