Convert numpy array to tuple

Note: This is asking for the reverse of the usual tuple-to-array conversion.

I have to pass an argument to a (wrapped c++) function as a nested tuple. For example, the following works

X = MyFunction( ((2,2),(2,-2)) ) 

whereas the following do not

X = MyFunction( numpy.array(((2,2),(2,-2))) ) X = MyFunction( [[2,2],[2,-2]] ) 

Unfortunately, the argument I would like to use comes to me as a numpy array. That array always has dimensions 2xN for some N, which may be quite large.

Is there an easy way to convert that to a tuple? I know that I could just loop through, creating a new tuple, but would prefer if there's some nice access the numpy array provides.

If it's not possible to do this as nicely as I hope, what's the prettiest way to do it by looping, or whatever?

5 Answers

>>> arr = numpy.array(((2,2),(2,-2))) >>> tuple(map(tuple, arr)) ((2, 2), (2, -2)) 
1

Here's a function that'll do it:

def totuple(a): try: return tuple(totuple(i) for i in a) except TypeError: return a 

And an example:

>>> array = numpy.array(((2,2),(2,-2))) >>> totuple(array) ((2, 2), (2, -2)) 
4

I was not satisfied, so I finally used this:

>>> a=numpy.array([[1,2,3],[4,5,6]]) >>> a array([[1, 2, 3], [4, 5, 6]]) >>> tuple(a.reshape(1, -1)[0]) (1, 2, 3, 4, 5, 6) 

I don't know if it's quicker, but it looks more effective ;)

1

Another option

tuple([tuple(row) for row in myarray]) 

If you are passing NumPy arrays to C++ functions, you may also wish to look at using Cython or SWIG.

4

If you like long cuts, here is another way tuple(tuple(a_m.tolist()) for a_m in a )

from numpy import array a = array([[1, 2], [3, 4]]) tuple(tuple(a_m.tolist()) for a_m in a ) 

The output is ((1, 2), (3, 4))

Note just (tuple(a_m.tolist()) for a_m in a ) will give a generator expresssion. Sort of inspired by @norok2's comment to Greg von Winckel's answer

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like