6

How to merge a mix of different elements (matlab style) in numpy?

[array([ 0.]), 0.0, 0.0011627, 0.0, 2.69, 0.0, array([ 3.8269, 7.0184]), array([ 4.4e-16, 2.1e+00])]

(I tried np.concatenate, but obviously it only takes arrays as input). Basically, I want to dynamically concatenate elements from a vector by indexing. I tried:

 V = np.array([1,2,3,4,5,6])
 Y = np.array([7,8,9,10,11,12])

 Z = np.array([V[0:2],Y[0],V[3],Y[1:3],V[4:],Y[4:]])

It works, but has array elements inside. I just want a flat vector of numbers (Matlab style) as later I make a matrix (called RES) with a bunch of these vectors. Even a simple

 np.savetxt('TT',RES,fmt='%1.1e') 

fails because it expects floats and not arrays inside.

Guess this should be simple. np.hstack does the job. But is there any other easy way to do Matlab style indexing & combining of vectors and scalars?

1 Answer 1

31

You could use np.r_:

In [32]: Z = np.r_[V[0:2],Y[0],V[3],Y[1:3],V[4:],Y[4:]]

In [33]: Z
Out[33]: array([ 1,  2,  7,  4,  8,  9,  5,  6, 11, 12])
Sign up to request clarification or add additional context in comments.

3 Comments

This is wonderful. Such methods seem to be hidden though as I've not come across them (np.s_, np.r_, np.c_ ) anywhere, yet! Gracias!
Yes, this one is mentioned in the NumPy Reference Guide, but not the User Guide.
@nahsivar please accept the answer if it resolved your question

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.