Я пытаюсь найти самый быстрый способ найти первое нулевое значение, отличное от -, для каждой строки двумерного отсортированного массива. Технически, единственными значениями в массиве являются нули и единицы, и он "отсортирован".
Например, массив может выглядеть следующим образом:
v =
0 0 0 1 1 1 1
0 0 0 1 1 1 1
0 0 0 0 1 1 1
0 0 0 0 0 0 1
0 0 0 0 0 0 1
0 0 0 0 0 0 1
0 0 0 0 0 0 0
Я мог бы использовать функцию argmax
argmax(v, axis=1))
чтобы найти, когда он изменится с нуля на единицу, но я считаю, что это будет выполнять исчерпывающий поиск по каждой строке. Мой массив будет разумного размера (~2000x2000 ). Будет ли argmax по-прежнему лучше, чем просто сортировка по поиску для каждой строки в цикле for, или есть лучшая альтернатива?
Также,массив всегда будет таким, что первая позиция единицы для строки всегда >= первая позиция единицы в строке над ней (, но не гарантируется, что в последних нескольких строках будет единица ). Я мог бы использовать это с помощью цикла for и «начального значения индекса» для каждой строки, равной положению первого 1 из предыдущей строки, но я прав, думая, что функция numpy argmax все равно превзойдет цикл, написанный на python.
Я бы просто сравнил альтернативы, но длина ребра массива может немного измениться (с 250 до 10 000 ).