Dear all,
my goal would be to apply some function on a local environment of size K x K x
K where K is bigger than 1 and odd. For example, if K = 3, it would be nice to
apply some function "func" on such an environment around each n-dimensional
position within the n-dimensional array. So, for K = 3 and the position (1,1,1)
if a 3D array, one would collect the array values at the positions X =
[(0,0,0),(0,0,1),(0,0,2),(0,1,0),...(2,2,2)] (K**3 = 27 in total in this
example) and yield those values to "func". The result value at position (1,1,1)
in the output array would be y = func(X). The same would apply for all entries
excluding the padding area (or according to some padding policy).
While I coded this many times on plain buffers in C++, I was wondering if there
would be an *efficient* way to do this in numpy? Up to now I relied on the
ndenumerate way of iterating n-dimensional arrays and aggregating the values
using slices, but this turns out to be unbearably slow even for quite small
arrays :-/
Is there a better "numpy-isque" way to do this? I thought of writing a custom
view or subclassing, but the efficient aggregation of local environments using
the ndenumerate and slice approach is slow, yet in C/C++ random access and
native support for parallelism (by means of OpenMP) would drastically
accelerate this.
Or would it even be preferred to add this functionality to the library? I could
imagine a special view, e.g., "LocalEnvironmentArrayView" or just a simple
function with the intended usage something like the following:
* a = ... # some n-dimensional numpy array
* func = lambda env: np.mean(env) - np.std(env)
* w = numpy.apply_on_local_environments(a, func, environment_size=3)
So, each entry in the interior (or also the boundary, depending on the padding
policy) of w would correspond to the evaluation of func on that local
environment.
Best regards,
Thomas
___
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com