[Numpy-discussion] Flattening an array

josef.pktd@gmai... josef.pktd@gmai...
Tue Dec 8 23:55:06 CST 2009


On Tue, Dec 8, 2009 at 7:29 PM, Jake VanderPlas <jakevdp@gmail.com> wrote:
> Hello,
> I have a function -- call it f() -- which takes a length-N 1D numpy
> array as an argument, and returns a length-N 1D array.
> I want to pass it the data in an N-D array, and obtain the N-D array
> of the result.
> I've thought about wrapping it as such:
>
> #python code:
> from my_module import f   # takes a 1D array, raises an exception otherwise
> def f_wrap(A):
>    A_1D = A.ravel()
>    B = f(A_1D)
>    return B.reshape(A.shape)
> #end code
>
> I expect A to be contiguous in memory, but I don't know if it will be
> C_CONTIGUOUS or F_CONTIGUOUS.  Is there a way to implement this such
> that
>  1) the data in the arrays A and B_1D are not copied (memory issues)
>  2) the function f is only called once (speed issues)?
> The above implementation appears to copy data if A is fortran-ordered.

maybe one way is to  check the flags, and conditional on C or F, use
the corresponding order
in numpy.ravel(a, order='C')  ?

if A.flags.c_contiguous:
...
elif A.flags.f_contiguous
...

not tried, and I don't know what the right condition for `is_c_contiguous` is

Josef

>  Thanks for the help
>   -Jake
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>


More information about the NumPy-Discussion mailing list