Поиск первого не-нулевого значения вдоль оси отсортированного двумерного массива numpy

Я пытаюсь найти самый быстрый способ найти первое нулевое значение, отличное от -, для каждой строки двумерного отсортированного массива. Технически, единственными значениями в массиве являются нули и единицы, и он "отсортирован".

Например, массив может выглядеть следующим образом:

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 ).

8
задан user1554752 31 July 2012 в 00:09
поделиться