[NumPy-Tickets] [NumPy] #1673: first nonzero element
NumPy Trac
numpy-tickets@scipy....
Sat Jul 9 07:48:03 CDT 2011
#1673: first nonzero element
-------------------------+--------------------------------------------------
Reporter: tom3118 | Owner: somebody
Type: enhancement | Status: new
Priority: normal | Milestone: 2.0.0
Component: Other | Version: 1.5.0
Keywords: |
-------------------------+--------------------------------------------------
Changes (by lcampagn):
* cc: lcampagn@… (added)
Comment:
I have seen many requests for a find_first in numpy, but most of these
requests have subtly different (and incompatible) requirements such as
"find first value less than x" or "find first nonzero value". I suggest
the following function specification:
{{{
ind = array.find(x, testOp='eq', arrayOp='all', axis=0, test=None)
arguments:
x -> value to search for
testOp -> condition to test for ('eq', 'ne', 'gt', 'lt', 'ge', 'le')
arrayOp -> method for joining multiple comparisons ('any' or 'all')
axis -> the axis over which to search
test -> for convenience, this may specify a function to call to
perform
the test. This is not expected to be efficient.
returns:
first index where condition is true (or test returns true, if given)
or None if the condition was never met
}}}
If the array has ndim > 1, then tests are performed using normal
broadcasting rules.
So for example, if I have an array with shape (2,3), the following would
be valid:
{{{
## find first row with all values=0
array.find(0, testOp='eq', arrayOp='all', axis=0)
## equivalent to:
for i in range(array.shape[axis]):
if (array[i] == 0).all():
return i
## find first column with any element greater than its corresponding
element in col
col = array([1,2])
array.find(col, testOp='gt', arrayOp='any', axis=1)
## equivalent to:
for i in range(array.shape[axis]):
if (array[:,i] == col.any():
return i
}}}
--
Ticket URL: <http://projects.scipy.org/numpy/ticket/1673#comment:4>
NumPy <http://projects.scipy.org/numpy>
My example project
More information about the NumPy-Tickets
mailing list