27

I am trying to merge two arrays with the same number of arguments.

Input:

first = [[650001.88, 300442.2,   18.73,  0.575,  650002.094, 300441.668, 18.775],
         [650001.96, 300443.4,   18.7,   0.65,   650002.571, 300443.182, 18.745],
         [650002.95, 300442.54,  18.82,  0.473,  650003.056, 300442.085, 18.745]]

second = [[1],
          [2],
          [3]]

My expected output:

final = [[650001.88, 300442.2,   18.73,  0.575,  650002.094, 300441.668, 18.775, 1],
         [650001.96, 300443.4,   18.7,   0.65,   650002.571, 300443.182, 18.745, 2],
         [650002.95, 300442.54,  18.82,  0.473,  650003.056, 300442.085, 18.745, 3]]

To do that I create simple loop:

for i in first:
        for j in second:
            final += np.append(j, i)

I got i filling that i missing something. First of all my loop i extremely slow. Secondly my data is quite have i got more than 2 mlns rows to loop. So I tried to find faster way for example with this code:

final = [np.append(i, second[0]) for i in first] 

It working far more faster than previous loop but its appending only first value of second array. Can you help me?

4 Answers 4

38

Use np.array and then np.concatenate,

import numpy as np

first = np.array([[650001.88, 300442.2,   18.73,  0.575,  
                   650002.094, 300441.668, 18.775],
                  [650001.96, 300443.4,   18.7,   0.65,   
                   650002.571, 300443.182, 18.745],
                  [650002.95, 300442.54,  18.82,  0.473,  
                   650003.056, 300442.085, 18.745]])

second = np.array([[1],
                   [2],
                   [3]])

np.concatenate((first, second), axis=1)

Where axis=1 means that we want to concatenate horizontally.

That works for me

Sign up to request clarification or add additional context in comments.

Comments

15

Use np.column_stack:

import numpy as np

first = [[650001.88, 300442.2,   18.73,  0.575,  650002.094, 300441.668, 18.775],
         [650001.96, 300443.4,   18.7,   0.65,   650002.571, 300443.182, 18.745],
         [650002.95, 300442.54,  18.82,  0.473,  650003.056, 300442.085, 18.745]]

second = [[1],
          [2],
          [3]]

np.column_stack([first, second])

If you need it as a list, use the method tolist:

np.column_stack([first, second]).tolist()

Comments

2

For this case, hstack (because second is already 2D) and c_ (because it concatenates along the second axis) would also work. In fact c_ would work even if second is shape (3,), as long as its length matches the length of first.

Assuming first and second are already numpy array objects:

out = np.c_[first, second]

or

out1 = np.hstack((first, second))

Output:

assert (out == np.array(final)).all() & (out == out1).all()

That being said, all are just different ways of using np.concatenate.

Comments

0

Multiply a 5x3 matrix by a 3x2 matrix (real matrix product)

import numpy as np
np_1= np.arange(15).reshape(5,3)
np_1

Comments

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.