[Numpy-discussion] short circuit != ?
Lluís
xscript at gmx.net
Wed Oct 27 13:06:36 EDT 2010
Alan G Isaac writes:
> Maybe:
> any((ai != bi) for ai,bi in izip(a.flat,b.flat))
> ?
I think this would indeed work, but it's not really friendly, while it
should work out-of-the-box.
Of course, we do not always want operations to perform lazily, so a
generic approach might be on the lines of:
any(a.lazy() != b)
Invoking 'lazy' on an ndarray would return an object that instead of
computing the given operations will just record them, and try to defer
their evaluation as much as possible.
E.g.,:
class LazyNdarray:
def __init__ (self, left, op = None, right = None):
self._left = left
self._op = op
self._right = right
# transitivize deferral on these operations
def __neq__ (self, other):
return LazyNdarray(self, "__neq__", other)
# evaluate on these operations
def __getitem__ (self, index):
return self._evaluate(index)
def __iter__ (self):
for idx in range(len(self._left)):
yield self._evaluate(idx)
# do the evaluation
def _evaluate (self, index)
# still, this will not work unles no broadcast is necessary
l = self._left[index]
op = getattr(l, self._op)
return op(right[index])
class ndarray:
def lazy (self):
return LazyNdarray(self)
Or something like that.
Lluis
--
"And it's much the same thing with knowledge, for whenever you learn
something new, the whole world becomes that much richer."
-- The Princess of Pure Reason, as told by Norton Juster in The Phantom
Tollbooth
More information about the NumPy-Discussion
mailing list